zoukankan      html  css  js  c++  java
  • kubernetes学习 Service (二)

    二、Cluster IP 底层实现

      延续 kubernetes学习 Service (一) 的内容。

      我们知道PodIP是在容器中配置的,那么 ServiceCLUSTER IP 又是配置在哪里?CLUESTER-IP 又是如何映射到 Pod IP 的?

      答案是:iptable。

     

      Cluster IP 是一个虚拟 IP,是由kubernetes 节点上的iptables规则管理的。

      可以通过root权限 iptables-save 命令打印出当前节点的 iptables 规则,截取与httpd-svc Cluster IP 

          

        上面的规则包含两条含义:

          * 如果 CLUSTER 内的 Pod 要访问 httpd-svc,则允许

          * 其他原地址访问 httpd-svc,跳转到规则 KUBE-SVC-RL3JAE4GN7VOGDGP

      

        (1) 1/3的概率 跳转到规则 KUBE-SEP-J7KWCV7US6EDHKCC

        (2) 1/3的概率 跳转到规则 KUBE-SEP-2Y5J5AVRJG7LJDZ6

        (3) 1/3的概率 跳转到规则 KUBE-SEP-RBOZOACVG7XXV2VP

      

      即,将请求分别转发到后端的三个Pod。通过上面的分析,我们得到结论:iptables 将访问 Service 的流量转发到后端 Pod,而且使用类似轮询的负载均衡策略。

          另外,Cluster 的每一个节点都配置了相同的 iptables 规则,这样就确保了整个 Cluster 都能通过 ServiceCluster IP 访问 Service。

    三、DNS 访问 Service

       Cluster 中,除了可以通过 Cluster IP 访问 Service,Kubernetess 还提供了更为方便的 DNS 访问。

       kubeadm 部署时会默认安装 kube-dns 组件

       

      kube-dns 是一个 DNS 服务器。每当有新的 Service 被创建,kube-dns 会添加该 Service 的 DNS 记录。Cluster 中的 Pod 可以通过<SERVICE_NAME>.<NAMESPACE_NAME> 访问 Service。 

      比如说我们可以用 httpd-svc.default 访问 Service httpd-svc

       

       如上所示,我们在临时的 busybox Pod 中验证了 DNS 的有效性。另外由于 Podhttpd-svc 同属于 default namespace, 因此可以省略 default 直接用 httpd-svc 访问 Service

      

       用 nslookup 查看 httpd-svcDNS 信息

       

       未完,待续。。。 

  • 相关阅读:
    tomcat使用入门
    IDEA2020 创建springboot项目提示程序包org.springframework.boot不存在 问题
    jvm内存泄露
    tomcat 上设置可以直接访问的图片路径
    服务器上安装mysql后开启远程连接
    图的遍历,BFS和DFS的Java实现
    并查集
    深度优先搜索实现拓扑排序(leetcode210课程表)
    在Java中怎么实现字符'a'转成字符'b'
    MyBatis底层原理
  • 原文地址:https://www.cnblogs.com/Lyh1997/p/10268764.html
Copyright © 2011-2022 走看看