本节咱们讨论 Kubernetes 网络这个重要主题。html
Kubernetes 做为编排引擎管理着分布在不一样节点上的容器和 Pod。Pod、Service、外部组件之间须要一种可靠的方式找到彼此并进行通讯,Kubernetes 网络则负责提供这个保障。本章包括以下内容:前端
Kubernetes 网络模型后端
各类网络方案网络
Network Policy负载均衡
Kubernetes 采用的是基于扁平地址空间的网络模型,集群中的每一个 Pod 都有本身的 IP 地址,Pod 之间不须要配置 NAT 就能直接通讯。另外,同一个 Pod 中的容器共享 Pod 的 IP,可以经过 localhost
通讯。ide
这种网络模型对应用开发者和管理员至关友好,应用能够很是方便地从传统网络迁移到 Kubernetes。每一个 Pod 可被看做是一个个独立的系统,而 Pod 中的容器则可被看作同一系统中的不一样进程。spa
下面讨论在这个网络模型下集群中的各类实体如何通讯。知识点前面都已经涉及,这里可当作复习和总结。代理
当 Pod 被调度到某个节点,Pod 中的全部容器都在这个节点上运行,这些容器共享相同的本地文件系统、IPC 和网络命名空间。code
不一样 Pod 之间不存在端口冲突的问题,由于每一个 Pod 都有本身的 IP 地址。当某个容器使用 localhost
时,意味着使用的是容器所属 Pod 的地址空间。htm
好比 Pod A 有两个容器 container-A1 和 container-A2,container-A1 在端口 1234 上监听,当 container-A2 链接到 localhost:1234,实际上就是在访问 container-A1。这不会与同一个节点上的 Pod B 冲突,即便 Pod B 中的容器 container-B1 也在监听 1234 端口。
Pod 的 IP 是集群可见的,即集群中的任何其余 Pod 和节点均可以经过 IP 直接与 Pod 通讯,这种通讯不须要借助任何的网络地址转换、隧道或代理技术。Pod 内部和外部使用的是同一个 IP,这也意味着标准的命名服务和发现机制,好比 DNS 能够直接使用。
Pod 间能够直接经过 IP 地址通讯,但前提是 Pod 得知道对方的 IP。在 Kubernetes 集群中, Pod 可能会频繁的销毁和建立,也就是说 Pod 的 IP 不是固定的。为了解决这个问题,Service 提供了访问 Pod 的抽象层。不管后端的 Pod 如何变化,Service 都做为稳定的前端对外提供服务。同时,Service 还提供了高可用和负载均衡功能,Service 负责将请求转发给正确的 Pod。
不管是 Pod 的 IP 仍是 Service 的 Cluster IP,它们只能在 Kubernetes 集群中可见,对集群以外的世界,这些 IP 都是私有的。
Kubernetes 提供了两种方式让外界可以与 Pod 通讯:
NodePort
Service 经过 Cluster 节点的静态端口对外提供服务。外部能够经过 <NodeIP>:<NodePort>
访问 Service。
LoadBalancer
Service 利用 cloud provider 提供的 load balancer 对外提供服务,cloud provider 负责将 load balancer 的流量导向 Service。目前支持的 cloud provider 有 GCP、AWS、Azur 等。
以上就是 Kubernetes 网络模型的相关讨论。
下一节咱们来看看 Kubernetes 支持的网络方案。
1.《天天5分钟玩转Kubernetes》
https://item.jd.com/26225745440.html
2.《天天5分钟玩转Docker容器技术》
https://item.jd.com/16936307278.html
3.《天天5分钟玩转OpenStack》
https://item.jd.com/12086376.html