endpoints是一种kubernetes资源类型,它是namespace scoped,简写为ep:
kubectl api-resources|grep endpointsendpoints ep true Endpoints
endpoints有两种应用办法:
随service被创立:
- 创立service对象的同时,kubernetes会创立同名的endpoints的对象;
- service的podSelector会将指标pod的endpoint信息(ip/port),增加到endpoints对象中;
独立创立endpoints:
- enpdoints作为一种资源类型,反对用户创立;
- 将内部服务的endpoint增加到endpoints对象,能够应用kubernetes service拜访内部服务;
service与endpoints
以一个简略的例子,来演示endpoints随service被主动创立进去。
创立nginx deploy,含2个pod:
apiVersion: apps/v1kind: Deploymentmetadata: labels: app: nginx name: nginxspec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest imagePullPolicy: IfNotPresent command: - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html ports: - name: http containerPort: 80 protocol: TCP
创立nginx service:
apiVersion: v1kind: Servicemetadata: name: nginx-svcspec: ports: - port: 80 targetPort: 80 selector: app: nginx
查看其service和endpoints资源:有一个同名的endpoints被创立进去
# kubectl get svc,endpointsNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/nginx-svc ClusterIP 10.233.26.39 <none> 80/TCP 3m2sNAME ENDPOINTS AGEendpoints/nginx-svc 10.233.96.113:80,10.233.97.95:80 3m2s
其endpoints的内容,理论是nginx pod的ip+port:
# kubectl get pod -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESnginx-6dcdfd5b8-8q7l5 1/1 Running 0 4m3s 10.233.97.95 master1 <none> <none>nginx-6dcdfd5b8-xsl96 1/1 Running 0 4m3s 10.233.96.113 master3 <none> <none>
内部服务与endpoints
手动创立endpoints,增加内部服务的endpoint,能够将内部服务作为kubernetes的service应用。
etcd有3节点部署在内部,为其创立service: etcd-k8s,不指定podSelector:
apiVersion: v1kind: Servicemetadata: name: etcd-k8s namespace: kube-systemspec: type: ClusterIP ports: - name: port port: 2379 protocol: TCP
创立同名的endpoints资源: etcd-k8s,将etcd节点的ip+port填进去:
apiVersion: v1kind: Endpointsmetadata: name: etcd-k8s namespace: kube-systemsubsets:- addresses: - ip: 178.104.163.38 nodeName: etc-master1 - ip: 178.104.163.187 nodeName: etc-master2 - ip: 178.104.163.243 nodeName: etc-master3 ports: - name: port port: 2379 protocol: TCP
这样,通过serviceName.namespace:port就能够在kubernetes集群内拜访内部的etcd服务:
etcd-k8s.kube-system:2379