第五章 Kubernetes进阶之Service与外界连通

  1.Pod与Service的关系

  Pod出现故障以后Deployment会根据策略重启Pod,但是重启Pod会生成新的IP,需要引入Service概念保证访问正常

  Service

  • 防止Pod失联
  • 定义一组Pod访问策略
  • 支持ClusterIP,NodePort以及LoadBanlancer三种类型
  • Service的底层主要有Iptables和IPVS两种网络模式

  2.Service的定义

  Pod与Service的关系

  • 通过label-selector相关联
  • 通过Service实现Pod的负载均衡(TCP/UDP 4层)

  示例service.yaml

#版本
apiVersion: v1
#类型是service
kind: Service
metadata:
  name: my-service
  namespace: default
spec:
  #service默认clusterIP
  clusterIP: 10.10.10.123
  ports:
  - name: http
    #service端口
    port: 80
    protocol: TCP
    #后端容器端口
    targetPort: 80
  #标签选择器关联后端的一组Pod
  selector:
    run: nginx
      

   创建

kubectl apply -f service.yaml

   因为该service标签匹配一个nginx所以如果没有创建nginx的deployment需要创建一个

kubectl run nginx --replicas=3 --image=nginx --port=80

   创建以后可以查看有对应标签的pod

# kubectl get pod -l run=nginx
NAME                     READY   STATUS    RESTARTS   AGE
nginx-57867cc648-b4rct   1/1     Running   0          9m53s
nginx-57867cc648-qgbwl   1/1     Running   0          9m53s
nginx-57867cc648-qmbbw   1/1     Running   0          9m53s

  查看

# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.10.10.1     <none>        443/TCP   6d23h
my-service   ClusterIP   10.10.10.123   <none>        80/TCP    6m25s

   其中name为kubernetes的service是k8s安装以后默认的一个service默认IP的service的第一个IP 10.10.10.1端口是443

  默认的svc的作用是负载均衡后端master的IP

  service需要动态感知后端ip变化可以通过以下命令查看,每个svc管理后端的一组容器

# kubectl get endpoints
NAME         ENDPOINTS                                      AGE
kubernetes   192.168.1.63:6443,192.168.1.64:6443            6d23h
my-service   172.17.41.2:80,172.17.55.2:80,172.17.55.4:80   9m59s

  3.service类型

  4.Service代理模式

  5.DNS

猜你喜欢

转载自www.cnblogs.com/minseo/p/12425623.html