1. k8s的服务发现机制
-
每个k8s中的service都会有一个唯一的Cluster IP以及唯一的名字,名字是由开发者自己定义的,部署的时候比没有必要改变,所以完全可以固定在配置中。
-
如何通过k8s的Service name找到Cluster IP呢?
-
最早的时候采用了Linux环境变量的方式解决这个问题,即每个Service生成一些对应的Linux环境变量(ENV),并且在每个Pod的容器在启动时自动注入这些环境变量。
-
目前通过Add-On增值包的方式引入DNS系统,把服务名作为DNS域名,这样就可以直接使用服务来建立通信了。
-
2. 外部系统访问Service的问题
-
k8s里的“三个IP”概念:
- Node IP:Node节点的IP地址。
- 是k8s集群中每个节点的物理网卡的IP地址,这是真实存在的物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信。
- k8s集群之外的节点访问k8s集群内部的节点或者TCP/IP服务的时候,必须要通过Node IP进行通信。
- Pod IP:Pod的IP地址。
- 是每个Pod的IP地址,虚拟的二层网络。是Docker Engine根据docker0网桥的IP地址段进行分配的。
- k8s里的一个
- Node IP:Node节点的IP地址。