独家客户关系

时间:2018-12-05 11:51:53

标签: kubernetes ip client affinity pod

我知道,Kubernetes中的LoadBalancer类型服务可能具有客户端相似性。事实是,这种亲缘关系并不禁止两个不同的客户端访问同一吊舱。

是否有可能总是将pod始终与同一客户端相关联?

提前感谢,祝您有个愉快的一天!

3 个答案:

答案 0 :(得分:2)

要仅允许特定的外部客户端访问特定的Pod / Deployment,可以使用白名单/源范围。限制可以applied to LoadBalancers设为loadBalancerSourceRanges。您可以在服务中添加一个部分,例如:

  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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

     

当前,本地化脚本,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的更多信息