内部Pod发现Service
根据之前提到的前端Pod通过访问后端Service间接与后端Pod通信的架构,内部的Pod需要通过某种方式知道Service对象的存在。Kubernetes为其提供了发现Service的IP和端口的方式。
通过环境变量发现Service
在同命名空间中的所有的Pod中的系统环境变量中都会添加该命名空间下所有Service对象(除了HeadlessService)的IP地址和端口相关信息。
如有一个名为kubia的Service对象,在同命名空间下的任意一个Pod中查看环境变量可以看到:
最值得关注的就是
KUBIA_SERVICE_HOST
和KUBIA_SERVICE_PORT
两个环境变量
通过DNS发现Service
DNS解析的前提是知道域名,在Kubernetes内部可以在知道服务名的前提下,通过全限定域名(FQDN)来访问。
Kubernetes的kube-system命名空间下有一个Service名为kube-dns,所有Pod都会将DNS服务器设置为该Service,并由该Service将解析请求转发至其后端的名为coredns的Pod。例如,查看一个Pod的/etc/resolv.conf
文件:
10.96.0.10
即为kube-dns这个Service的ClusterIP
通过FQDN访问Service
直接举例子,假设在default命名空间下有一个名为kubia的Service对象,那么它的全限定域名则为kubia.default.svc.cluster.local
,那么可以通过下面任何一种方式访问Service:
Last updated
Was this helpful?