Kubernetes学习之网络
一、Kubernetes网络模型
1.集群中的每个pod都有自己的ip地址,pod之间不需要配置NAT就可以直接通信,同一个pod中容器共享pod的ip,能够通过localhost进行通信。每个pod可以看作一个独立的系统,pod中的容器则可以被看作同一个系统的不同进程。
2.pod容器之间的通信:
当pod被调度到某个节点,pod中所有的容器都在这个节点上运行,这些容器共享相同的本地文件系统和网络命名空间。
不同pod之间不存在端口冲突的问题,因为每个pod都有自己的ip地址,当某个容器使用localhost时,意味着使用容器所属的pod的地址空间。
3.pod之间的通信:
pod的ip时集群可见,即集群中任何其他的pod和node都可以通过ip直接与pod进行通信
4.pod和service的通信:
pod之间可以直接通过ip地址通信,但前提是pod知道对方的ip,在kubernetes中pod因为会被频繁的销毁和创建,其ip不是固定的,因此,需要一个稳定的前端对外提供服务的service(其ip不变)将请求转发给正确的pod。
二、Network Policy
1.Network Policy是kubernetes的一种资源,NP通过label选择pod并指定其他pod与外界如何与这些pod通信。
2.默认情况下,所有的pod是非隔离的,即任何来源的网络流量都可以访问pod,没有任何限制,当pod定义了NP时,只有policy允许的流量才可以访问pod
3.创建NP:
查看创建的NP:
验证NP的有效性:
因为在创建NP时定义了只能通过80端口访问,不可以通过8080端口访问,此时通过该端口进行访问访问失败表示Np运行正常
此外,集群节点也无法访问到service,同时也ping 不到副本pod,并且集群外部也无法访问到service,若希望集群外部的节点可以访问到应用,可以修改NP定义的内容
上述内容修改之后,集群的节点和外部的节点都可以访问
除了,ingress可以限制进入的流量,也可以通过egress限制外出的流量