svc原本与pod是不相连的,svc通过标签选择器获取pod地址并放在endpoint中,当客户端访问服务端时会从endpoint中选择一个,并将传入连接重定向到该位置监听的服务器。
当服务的endpoint和服务解耦后,可以分别手动配置和更新它们。(如果svc创建时不指定pod标签则需要自定义endpoint,因为svc需要通过pod标签来获取pod信息)
手动配置
apiVersion: v1
kind: Service
metadata:
name: external-service 这个要与endpoint中的名字一样
spec:
type: NodePort
ports:
- port: 80 集群内部端口
targetPort: 8080 pod服务中暴露的端口
nodePort: 30081 外部访问端口
---
apiVersion: v1
kind: Endpoints
metadata:
name: external-service 这个要与svc中的名字一样
subsets:
- addresses:
- ip: 100.118.53.66
- ip: 100.118.53.67
ports:
- port: 8080 pod中服务暴露的端口