代码之家  ›  专栏  ›  技术社区  ›  lucidquiet

Kubernetes中的服务只是反向代理,允许一个固定的接触点吗?

  •  1
  • lucidquiet  · 技术社区  · 8 年前

    我正在研究Kubernetes服务(这是k8s组件的一种,很像Pods和replicaset)。它们看起来像反向代理,但我知道k8s内部使用DNS,所以也许它们是某种负载平衡DNS?这也意味着,由于Pod可以重新定位或存在于许多节点上,它不能简单地作为反向代理,因为它也需要可寻址,但在许多机器上共享一个IP(显然很难想象它们是如何在不直接查看源代码的情况下构建的。

    2 回复  |  直到 8 年前
        1
  •  2
  •   helmbert    8 年前

    常规 ClusterIP

    确保网络连接 type: ClusterIP 服务是公司的责任 kube-proxy --通常在集群的每个节点上运行的组件。kube代理通过拦截每个节点上pod的传出流量并过滤针对服务ip的流量来实现这一点。由于它连接到Kubernetes API,kube代理可以确定哪些Pod IP与每个服务IP相关联,并可以相应地转发流量。

    从概念上讲,kube代理可能被认为类似于反向代理(因此得名),但通常使用IPtables规则(或者,从kubernetes1.9开始,可选IPVS)。每个创建的服务将在每个节点上产生一组IPtables规则,该规则拦截并将针对服务IP的流量转发到各个Pod IP(服务IP是纯虚拟的,并且仅存在于这些IPtables规则中;在整个集群中,您将找不到一个实际的网络接口来保存该IP)。

    负载平衡也通过IPtables规则(或ipv)实现。负载平衡总是发生在 来源 流量来源的节点。

    下面是一个来自 Debug Services

    u@node$ iptables-save | grep hostnames
    -A KUBE-SEP-57KPRZ3JQVENLNBR -s 10.244.3.6/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
    -A KUBE-SEP-57KPRZ3JQVENLNBR -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.3.6:9376
    -A KUBE-SEP-WNBA2IHDGP2BOBGZ -s 10.244.1.7/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
    -A KUBE-SEP-WNBA2IHDGP2BOBGZ -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.1.7:9376
    -A KUBE-SEP-X3P2623AGDH6CDF3 -s 10.244.2.3/32 -m comment --comment "default/hostnames:" -j MARK --set-xmark 0x00004000/0x00004000
    -A KUBE-SEP-X3P2623AGDH6CDF3 -p tcp -m comment --comment "default/hostnames:" -m tcp -j DNAT --to-destination 10.244.2.3:9376
    -A KUBE-SERVICES -d 10.0.1.175/32 -p tcp -m comment --comment "default/hostnames: cluster IP" -m tcp --dport 80 -j KUBE-SVC-NWV5X2332I4OT4T3
    -A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.33332999982 -j KUBE-SEP-WNBA2IHDGP2BOBGZ
    -A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-X3P2623AGDH6CDF3
    -A KUBE-SVC-NWV5X2332I4OT4T3 -m comment --comment "default/hostnames:" -j KUBE-SEP-57KPRZ3JQVENLNBR
    

    有关更多信息,请查看 Virtual IPs and Service Proxies 手册中的章节。

    丛生 服务,还有 Headless Services clusterIP: None 创建服务时)。他们不会使用kube代理;相反,它们的DNS主机名将直接解析为与服务关联的所有Pod ip。负载平衡是通过常规DNS循环来实现的。

        2
  •  1
  •   Rico    8 年前

    iptables 除非您显式使用 ipvs Cillium BFP ). 每个节点中的kube代理管理iptable规则。有关代理模式的详细信息 here .

    my-service.my-namespace.svc.cluster.local 更多信息 here

    推荐文章