【问题标题】:How to get clients public IP on the pod?如何在 pod 上获取客户端的公共 IP?
【发布时间】:2019-09-29 08:39:30
【问题描述】:

我有一个基于 Python-Flask 的应用程序。我想在客户访问我的入口端点时获取他们的公共 IP。

我已经尝试将 externalTrafficPolicy 更改为 Local 和 Cluster。

我的 Pod YAML 文件

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: webplatform
  name: webplatform-deployment-6d68c99fc7-xlb8j
  namespace: prod
spec:
  containers:
  - command:
    - python
    - /app/app.py
    envFrom:
    - secretRef:
        name: webplatform-secret
        optional: false
    image: docker.fuchicorp.com/webplatform-prod:0.5
    imagePullPolicy: Always
    name: webplatform-container
  imagePullSecrets:
  - name: nexus-creds
  serviceAccount: webplatform-service-account
  serviceAccountName: webplatform-service-account

我的服务 YAML 文件

apiVersion: v1
kind: Service
metadata:
  name: webplatform-service
  namespace: prod
spec:
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 32744
    port: 7101
    protocol: TCP
    targetPort: 5000
  selector:
    run: webplatform
  sessionAffinity: None
  type: NodePort

我的 Ingress 资源 YAML 文件

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    certmanager.k8s.io/cluster-issuer: letsencrypt-fuchicorp-prod
    kubernetes.io/ingress.class: nginx
  generation: 2
  name: ingress-webplaform
  namespace: prod
spec:
  rules:
  - host: academy.fuchicorp.com
    http:
      paths:
      - backend:
          serviceName: webplatform-service
          servicePort: 7101
  tls:
  - hosts:
    - academy.fuchicorp.com
    secretName: letsencrypt-sec-webplatform-prod

当我看到日志时,我在日志中看到了 Ingress-Controllers IP

INFO: 10.16.0.16 - - [28/Sep/2019 20:06:12] "GET / HTTP/1.1" 200 -

【问题讨论】:

    标签: kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    TL;DR

    客户端 IP 应该可以通过 X-Forwarded-For HTTP 标头获得


    它应该由负载平衡器(入口控制器)提供。假设您的集群在云上运行(aws、gcp 等),您可以通过 X-Forwarded-For HTTP 标头获取客户端 IP。

    如果它是一个本地 k8s 集群(您在自己的私有云/本地机器上运行它),请配置您的负载均衡器来执行此操作 - http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

    【讨论】:

    • 在我的例子中,我创建了一个带有服务的示例 pod,并使用 nginx.ingress.kubernetes.io/cors-allow-headers: "X-Forwarded-For" 使用入口资源进行测试,但仍然没有工作。源代码在这里github.com/fsadykov/ingress-example.git
    猜你喜欢
    • 2020-07-24
    • 2017-06-14
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多