K8s-Service的服务发现机制

服务发现机制主要是K8s集群如何获取后端服务的访问地址。

K8s主要提供了俩种模式,环境变量方式和DNS方式

环境变量

apiVersion: v1
kind: Service
metadata:
name: kubia
spec:
selector:
app: kubia-service
ports:
- protocol: TCP
port: 8080
targetPort: 8080

这个对应的Pod就会出现以下环境变量:

KUBIA_SERVICE_HOST=10.10.122.234
KUBIA_SERVICEPORT=8080
KUBIA_PORT=tcp://10.10.122.234:8080
KUBIA_PORT_8080_TCP=tcp://10.10.122.234:8080
KUBIA_PORT_8080_TCP_PRORO=tcp
KUBIA_PORT_8080_TCP_PORT=8080
KUBIA_PORT_8080_TCP_ADDR=10.10.122.234

所以通过curl http://${KUBIA_SERVICE_HOST}:${KUBIA_SERVICEPORT}可以访问。

DNS模式

Service在K8s中遵循DNS命名规范,Service的DNS域名为

..svc.

  • servicename:服务名字
  • namespcae:所在namespace
  • clusterdomain: K8s集群设置的后缀(如cluster.local)

当设置了name

<_portname>.<_protocol>...svc.

会多一条:_http._tcp.webapp.default.svc.cluster.local