外部系统如何访问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