【问题标题】:Exlusive client affinity独家客户亲和力
【发布时间】:2021-01-02 17:35:49
【问题描述】:

我知道 Kubernetes 中的 LoadBalancer 类型服务可以实现客户端关联。问题是这种亲和性并不禁止两个不同的客户端访问同一个 pod。

是否可以将一个 pod 始终以独占方式关联到同一个客户端?

提前致谢,祝您有美好的一天!

【问题讨论】:

    标签: kubernetes load-balancing


    【解决方案1】:

    要仅允许特定的外部客户端访问特定的 Pod/部署,您可以使用白名单/源范围。限制可以是applied to LoadBalancersloadBalancerSourceRanges。您向服务添加一个部分,例如:

      loadBalancerSourceRanges:
      - 130.211.204.1/32
      - 130.211.204.2/32  
    

    但是not all cloud providers currently support it

    或者,您可以使用 Ingress 和 apply whitelisting on the Ingress 公开 Pod。对于使用 nginx Ingress 的白名单,您可以向 Ingress 添加注释,例如 nginx.ingress.kubernetes.io/whitelist-source-range: 49.36.X.X/32

    【讨论】:

      【解决方案2】:

      不,这意味着您为每个客户端运行一个服务副本,这是一种非常不标准的做事方式,因此您必须自己构建它。

      【讨论】:

        【解决方案3】:

        不完全是POD

        您可以使用基于客户端 IP 的会话亲和性,当然前提是客户端 IP 是静态的并且每个 IP 只有一个客户端。

        apiVersion: v1
        kind: Service
        metadata:
          name: wlp-service
          labels:
            app: wlp-service
        spec:
          type: LoadBalancer 
          sessionAffinity: ClientIP
          ports:
          - port: 443
            targetPort: 7443
            name: https
          - port: 80
            targetPort: 7080
            name: http
          selector:
            app: POD_NAME
        

        第二个选项是基于 Cookie 的会话亲和性。如果有来自同一 IP 的多个客户端,这将起作用,因为 cookie 本地存储在客户端计算机上。

        您将需要使用 Ingress 对象并生成 cookie。您的Ingress 部署需要:

        Annotations:
          affinity: cookie
          session-cookie-hash:      sha1/md5/index #choose one
          session-cookie-name:      INGRESSCOOKIE #name used in cookie value
        

        您可以通过 medium.com 在Redirect your users to the same pod by using session affinity on Kubernetes 上阅读有关这两种方式的更多信息

        如果我没记错的话,只有在运行 kube-proxy 之前在节点上安装了 IPVS 内核模块时,Session Affinity 才会起作用。

        在 IPVS 模式下运行 kube-proxy

        目前,local-up 脚本、GCE 脚本和 kubeadm 支持通过导出环境变量 (KUBE_PROXY_MODE=ipvs) 或指定标志 (--proxy-mode=ipvs) 来切换 IPVS 代理模式。在运行 IPVS 代理之前,请确保已经安装了 IPVS 所需的内核模块。

        ip_vs
        ip_vs_rr
        ip_vs_wrr
        ip_vs_sh
        nf_conntrack_ipv4
        

        最后,对于 Kubernetes v1.10,功能门 SupportIPVSProxyMode 默认设置为 true。对于 Kubernetes v1.11,特性门被完全移除。但是,您需要在 v1.10 之前为 Kubernetes 显式启用 --feature-gates=SupportIPVSProxyMode=true

        请查看这个 StackOverflow 问题 Is it possible to route traffic to a specific Pod?,也可以在 IPVS-Based In-Cluster Load Balancing Deep Dive 上阅读有关 IPVS 的更多信息

        【讨论】:

          猜你喜欢
          • 2022-07-06
          • 1970-01-01
          • 1970-01-01
          • 2017-01-10
          • 2013-08-19
          • 2015-10-28
          • 2016-05-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多