美文网首页
kubernetes——外界访问Service三种方式

kubernetes——外界访问Service三种方式

作者: 懒无趣 | 来源:发表于2020-12-25 07:46 被阅读0次

    NodePort

    apiVersion: v1
    kind: Service
    metadata:
      name: my-nginx
      labels:
        run: my-nginx
    spec:
      type: NodePort ⚠️
      ports:
      - nodePort: 8080 ⚠️
        targetPort: 80
        protocol: TCP
        name: http
      - nodePort: 443
        protocol: TCP
        name: https
      selector:
        run: my-nginx
    

    原理:在每一台宿主机上添加一条iptables规则

    -A KUBE-NODEPORTS -p tcp -m comment --comment "default/my-nginx: nodePort" -m tcp --dport 8080 -j KUBE-SVC-67RL4FN6JRUPOJYM
    

    在NodePort模式下,会多一次SNAT转换,给即将离开这台主机的 IP 包,进行了一次 SNAT 操作,将这个 IP 包的源地址替换成了这台宿主机上的 CNI 网桥地址,或者宿主机本身的 IP 地址(如果 CNI 网桥不存在的话)。

    目的:

               client
                 \ ^
                  \ \
                   v \
       node 1 <--- node 2
        | ^   SNAT
        | |   --->
        v |
     endpoint
     
     如果没有做 SNAT 操作的话,这时候,被转发来的 IP 包的源地址就是 client 的 IP 地址。所以此时,Pod 就会直接将回复发给client。对于 client 来说,它的请求明明发给了 node 2,收到的回复却来自 node 1,这个 client 很可能会报错。
    

    LoadBalancer

    kind: Service
    apiVersion: v1
    metadata:
      name: example-service
    spec:
      ports:
      - port: 8765
        targetPort: 9376
      selector:
        app: example
      type: LoadBalancer
    

    ExternalName

    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: example-service
    spec:
      ports:
      - port: 8765
        targetPort: 9376
      selector:
        app: example
      type: LoadBalancer
    

    附:iptables 链名关系

    1. KUBE-SERVICES 或者 KUBE-NODEPORTS 规则对应的 Service 的入口链,这个规则应该与 VIP 和 Service 端口一一对应;
    2. KUBE-SEP-(hash) 规则对应的 DNAT 链,这些规则应该与 Endpoints 一一对应;
      3.KUBE-SVC-(hash) 规则对应的负载均衡链,这些规则的数目应该与 Endpoints 数目一致;
    3. 如果是 NodePort 模式的话,还有 POSTROUTING 处的 SNAT 链。

    相关文章

      网友评论

          本文标题:kubernetes——外界访问Service三种方式

          本文链接:https://www.haomeiwen.com/subject/ahcbnktx.html