zoukankan      html  css  js  c++  java
  • k8s pod内以及pod间通信机制

    转载 https://cloud.tencent.com/developer/article/1618617

    pod 通信机制

    如果要说明 pod 的通信机制,要从一个镜像说起,在 kubectl 安装kubernetes 的时候一定会看到 k8s.gcr.io/pause 这个镜像,不知道有没有疑问,这个到底是干嘛的?其它几个镜像顾名思义,但是这个【暂停】是什么?没错,他就是用来 hold 一个 Pod 内部多个 Container 网络通信。

    如果在计算节点上运行 docker ps 命令

    [root@localhost ~]# docker network ls
    NETWORK ID          NAME                 DRIVER              SCOPE
    c250329fad3c        bridge               bridge              local
    c7c3d1f77969        compose_extnetwork   bridge              local
    199b85fbf2fa        host                 host                local
    b488be9da3d6        none                 null                local

    如上所示,你可以看到在创建 nginx pod 过程中,不仅创建了一个nginx 容器,并附带了一个 pause 容器,而且 pause 容器是在 nginx容器之前创建的,这个被暂停的容器把所有的容器收纳到一起,一个基础容器,唯一目的就是保存所有的命名空间。容器中 pod 共享同一个 IP 地址。故同一个 Pod 中 Container 可以做到直接通过 localhost 直接通信,那么同一个节点多个 Pod 之间如何通信的呢?

    (d)

    pause 容器启动之前,会为容器创建虚拟一对 ethernet 接口,一个保留在宿主机 vethxxx(插在网桥上),一个保留在容器网络命名空间内,并重命名为eth0。两个虚拟接口的两端,从一端进入,另一端出来。任何 Pod 连接到该网桥的 Pod 都可以收发数据。如(d)图所示。


    4、跨 node pod 通信

    跨节点 Pod 通信,相当于创建一个整个集群公用的【 网桥 】然后把集群中所有的 Pod 连接起来,就可以通信了。

    (e)

    其中跨整个集群的 Pod ip 是唯一的,当报文从一个节点转发到另外一个节点时,报文首先通过 veth,然后通过网桥,转发到物理适配器网卡,最后转发到其它节点的虚拟网桥,进而到达 veth 目标容器。如(e)图所示。

    其实现方式有 Flannel、calico、weave 等。

    注意 k8s 的网桥跟 docker0  网桥功能类似,但是 k8s 并没有复用 docker0 网桥,其原因是 Kubernetes 为了连接 infra 容器更加方便,而是重新实现了 CNI 网络接口功能,它允许网络插件使用 CNI 接口,比如 flannel,它本身实现也经过几个过程,其本质上来说,是基于「隧道」机制实现。示意图(f)所示:

  • 相关阅读:
    C# WinForm程序中强制退出程序以及启动程序
    WinForm程序中对关闭按钮的操作
    DataTable转换为List
    json日期转换
    ajax局部刷新
    程序暂停或延迟几秒再次运行
    分页显示的制作流程
    Django 项目基础操作总结
    Django初识
    Mysql有关分页的操作
  • 原文地址:https://www.cnblogs.com/to-here/p/14437132.html
Copyright © 2011-2022 走看看