Kubernetes Nginx 保留源 IP

Kubernetes Nginx Preserve Source IP

我有一些服务 运行 需要保留源 IP 才能正确执行身份验证。我是 运行 AKS 中的 Kubernetes 环境,使用 Nginx 作为我的 Ingress 控制器,我在理解如何正确实现它时遇到问题。

我通读了这个

https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer

还有这个

https://github.com/kubernetes/ingress-nginx/issues/1067

并阅读将此 service.spec.externalTrafficPolicy 设置为 Local 应该可以解决我的问题,但我很难理解我应该将其应用于哪个服务。这听起来几乎需要添加到 nginx 部署中,并且它会影响所有不需要的部署。

我的问题是,有没有一种方法可以将它应用到我的服务清单中,只用于需要它的服务,而不是通过 Nginx 注释或调整我正在部署的服务的服务清单,将它一揽子添加到所有东西中?

作为参考,这是我用 helm 部署的服务清单:

apiVersion: v1
kind: Service
metadata:
  name: {{ template "service.fullname" . }}
  labels:
    app: {{ template "service.name" . }}
    chart: {{ template "service.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  type: {{ .Values.service.type }}. #ClusterIP
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.targetPort }}
      protocol: TCP
      name: http
  selector:
    app: {{ template "service.name" . }}
    release: {{ .Release.Name }}

您显然需要将该设置添加到 nginx ingress controller 服务,即带有 type = LoadBalancer 的服务。

想一想,别无选择。 Nginx ingress controller 是您集群中的入口点,因此如果您不将源 IP 地址保存在那里,您将无法在之后的服务中使用它。