外部系统如何访问service

K8s中存在三种IP,分别是:

  • Node IP: Node 节点的IP地址

首先,Node IP是Kubernetes集群中每个节点的物理网卡的IP地址,这是一个真实存在的 物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信,不管它们中是否有部 分节点不属于这个Kubernetes集群。这也表明了Kubernetes 集群之外的节点访问Kubernetes集群之内的某个节点或者TCP/IP服务的时候,必须要通过NodeIP进行通信。

  • Pod IP: Pod的IP地址

其次,Pod IP是每个Pod的IP地址,它是Docker Engine根据docker0网桥的IP地址段进行分配的,通常是一个虚拟的二层网络,前面我们说过,Kubernetes要求位于不同 Node 上的Pod能够彼此直接通信,所以Kubernetes里一个Pod里的容器访问另外一个Pod里的容器,就是通过Pod IP所在的虚拟二层网络进行通信的,而真实的TCP/IP流量则是通过Node IP所在的物理网卡流出的。

  • Cluster IP: Service的IP地址

Service的 Cluster IP属于Kubernetes集群内部的地址,无法在集群外部直接使用这个地址。那么矛盾来了:实际上我们开发的业务系统中肯定多少有一部分服务是要提供给Kubernetes集群外部的应用或者用户来使用的,典型的例子就是Web端的服务模块.

kubectl get -A pods --watch