Linux实战笔记-----service

一、service简述

Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应
用可以方便地实现服务发现和负载均衡。

service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现)

类型:

  • ClusterIP:默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。
  • NodePort:将Service通过指定的Node上的端口暴露给外部,访问任意一个NodeIP:nodePort都将路由到ClusterIP。
  • LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均衡器,并将请求转发到 :NodePort,此模式只能在云服务器上使用。
  • ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过spec.externlName 设定)

二、IPVS模式的Service实现

安装并查看ipvs模块,编辑ipvs模式到k8s配置中

yum install -y ipvsadm
lsmod |grep ip_vs
kubectl -n kube-system get cm
kubectl -n kube-system edit cm

在这里插入图片描述
在这里插入图片描述
删除副本后才可生效,批量删除副本,自动生成新的副本,再次查看

ipvsadm -l
kubectl get pod -n kube-system |grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
ipvsadm -ln

在这里插入图片描述
访问任意服务svc,可查看到访问次数

curl 10.99.248.176
ipvsadm -ln

在这里插入图片描述

三、Service实现外部访问

1.ClusterIP

具体实现原理依靠kubeproxy组件,通过iptables或是ipvs实现,这种类型的service只能在集群内访问
创建svc.yaml

 vim svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysvc
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  selector:
    app: myapp

kubectl apply -f svc.yaml

查看网卡
在这里插入图片描述
查看ClusterIP

kubectl get svc 

server3访问
在这里插入图片描述

NodePort

基于ClusterIp,另外在每个Node上开放一个端口,可以从所有的位置访问这个地址。可通过yaml文件创建NodePort类型的service,若svc.yaml文件存在,则可直接修改

kubectl edit svc mysvc 

在这里插入图片描述
查询svc
在这里插入图片描述
可看到主机端,服务端31786端口被打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.LoadBalancer

从外部访问 Service 的第二种方式,适用于公有云上的 Kubernetes 服务。这时候,你可以指定一个 LoadBalancer 类型的 Service。,在service提交后,Kubernetes就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP地址配置给负载均衡服务做后端

更改kube-proxy配置 strictARP: true,修改后刷新生效

kubectl edit cm kube-proxy -n kube-system
 kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'

在这里插入图片描述
在这里插入图片描述
从metallb官网上下载两个yaml文件,将namespace.yaml的内容放到metallb.yaml里,方便实验

wget https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/namespace.yaml
wget https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml

将namespace.yaml的内容放到metallb.yaml里,方便实验

在这里插入图片描述
须提前下载speaker:v0.10.2,controller:v0.10.2,修改metallb.yaml里的image地址

在这里插入图片描述
在这里插入图片描述
应用metallb.yaml文件
在这里插入图片描述
可以看到新的ns被创建出来
在这里插入图片描述

ConfigMap是一种API对象,用来将非加密数据保存到键值对中。可以用作环境变量、命令行参数或者存储卷中的配置文件。

ConfigMap可以将环境变量配置信息和容器镜像解耦,便于应用配置的修改。如果需要存储加密信息时可以使用Secret对象。

建立configmap.yaml并应用

vim configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 172.25.21.10-172.25.21.20

kubectl apply -f configmap.yaml 

查看创建出的cm
在这里插入图片描述
创建lb-svc.yaml文件并应用

vim lb-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: lb-svc
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80
    selector:
      app: myapp
    type: LoadBalancer


3.ExternalName

建立ex-svc.yaml

vim ex-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type:  ExternalName
  externalName: www.westos.org

应用后查看,svc的EXTERNAL-IP修改成了www.westos.org
在这里插入图片描述
解析一下这个服务的域名

dig -t A my-service.DEFAULT.SVC.CLUSTER.LOCAL. @10.96.0.10

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值