软件开发架构师

第十二章 网络(上)

架构 29 2019-03-22 23:11

12.1 kubernetes网络模型

  集群中每个pod都有自己的IP地址,Pod之间不用配置NAT就能直接通信。

   同一个Pod中的容器共享Pod的IP,能通过localhost通信。

  每个pod可被看做是一个个独立的系统,而pod中的容器则可被看做是同一个系统中的不同进程

  1. Pod内容器之间通信

  当Pod被调度到某个节点,Pod中的所有容器都在这个节点上运行,这些容器共享相同的本地文件系统,IPC和网络命名空间。

  2. Pod之间的通信

  Pod的IP是集群可见的,即集群中的任何其他Pod和节点都可以通过IP直接与Pod通信,这种通信不需要任何网络地址转换、隧道或代理技术。

  3. Pod与Service的通信

  Pod间可以直接通过IP地址通信,但是前提是Pod需要知道对方的IP。 在K8s集群中,Pod频繁的被创建和销毁,pod的IP是不固定的。

  为了解决这个问题,Service提供了访问Pod的抽象层。无论Pod如何变化,service对外提供相对稳定的服务。此外,service还提供了高可用和负载均衡,转发给Pod。

  4. 外部访问

  无论是Pod和service的ClusterIP(注意是Cluster Ip),它们只能在K8s集群中可见,对集群之外的世界,这些IP是私有的

  K8s提供了两种方式让外界能够与Pod通信:

  • NodePort: Service通过Cluster节点的静态端口对外提供服务。外部可以通过 <NodeIP>:<NodePort>访问service。
  • LoadBalancer:   

 12.2 各种网络方案

  为了保证网络方案的标准化、扩展性和灵活性,K8s采用了Container Networking Interface(CNI)规范。

  CNI: 是CoreOS提出的容器网络规范,使用了插件(Plugin)模型创建容器的网络栈。

12.3 Network Policy

  Network Policy是K8s的一种资源,通过Label选择Pod,并指定其他Pod或外界如何与这些Pod通信。

  默认情况下,所有Pod是非隔离的,任何来源的网络流量都可以访问Pod;当为Pod定义了Network Policy时,只有Policy允许的流量才能访问Pod。

  

文章评论