【问题标题】:How to preserve Client IP Address with GKE Ingress controller on Kubernetes?如何在 Kubernetes 上使用 GKE Ingress 控制器保留客户端 IP 地址?
【发布时间】:2022-01-25 12:13:35
【问题描述】:

我想在 GKE Ingress Controller 后面运行的 .NET 应用程序中捕获客户端 IP 地址,以确保允许客户端。

var requestIpAddress = request.HttpContext.Connection.RemoteIpAddress.MapToIPv4();

我没有获取客户端 IP 地址,而是获取了我的 GKE 入口 IP 地址,因为入口应用了一些转发规则。

GKE Ingress 控制器指向 NodePort 类型的 Kubernetes 服务。

我尝试将规范添加到 NodePort 服务以保留客户端 IP 地址,但它没有帮助。这是因为 NodePort 服务也在 Ingress 后面运行

externalTrafficPolicy: Local

是否可以在 Kubernetes 上使用 GKE Ingress 控制器保留客户端 IP 地址?

Ingress 的 NodePort 服务:

apiVersion: v1
kind: Service
metadata:
  name: api-ingress-service
  labels:
    app/name: ingress.api
spec:
  type: NodePort
  externalTrafficPolicy: Local
  selector:
    app/template: api
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: http

入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress
  namespace: default
  labels:
    kind: ingress
    app: ingress
  annotations:
    networking.gke.io/v1beta1.FrontendConfig: frontend-config
spec:
  tls:
  - hosts:
    - '*.mydomain.com'
    secretName: tls-secret
  rules:
  - host: mydomain.com
    http:
      paths:
      - path: /*
        pathType: ImplementationSpecific
        backend:
          service:
            name: api-ingress-service
            port:
              number: 80

【问题讨论】:

  • 您需要获取服务器上的套接字并访问远程端点。请参阅:digitalocean.com/community/questions/…
  • 您使用的是哪个 Kubernetes 版本?
  • @MikolajS。客户端版本:v1.21.3,服务器版本:v1.21.6-gke.1500
  • 基于thisthis answer 你能在你的应用程序中使用X-Forwarded-For 标头吗?
  • X-Forwarded-For 标头很容易修改。在我的应用程序中,我想使用客户端的 IP 地址作为我需要授权某个支付交易的保证。我不能依赖可以编辑的标题

标签: c# .net kubernetes google-cloud-platform kubernetes-ingress


【解决方案1】:

发布社区 wiki 以获得更好的可见性。随意扩展它。


目前,对于所有 GCP HTTP(s) 负载均衡器,在 GKE Ingress 中获取客户端源 IP 地址的唯一方法是 use X-Forwarded-For header. It's known limitation(GKE Ingress 使用外部 HTTP(s) LB)。

如果不满足您的需求,请考虑迁移到使用外部 TCP/UDP 网络 LoadBalancer 的第三方 Ingress Controller,例如 NGINX Ingress Controller

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 2021-09-14
    • 2022-11-05
    • 2017-02-08
    • 2018-09-25
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    相关资源
    最近更新 更多