【问题标题】:Kubernetes getting IP from Ingress (Oracle Cloud)Kubernetes 从 Ingress (Oracle Cloud) 获取 IP
【发布时间】:2021-11-03 18:51:12
【问题描述】:

我的问题是这个问题的重复:nginx ingress controller forward source ip

虽然接受的答案有一个Helm repository,但现在已弃用,并不能解决转发用户 IP 的问题。

我关注了官方Oracle Documentation,通过查看文件deploy.yaml可以看到该策略已经默认设置为Local:

apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    helm.sh/chart: ingress-nginx-3.23.0
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/version: 0.44.0
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/component: controller
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  type: LoadBalancer
  externalTrafficPolicy: Local
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https

虽然使用kubectl logs POD_NAME 检查日志时,我总是得到10.0.20.X 访问端点,而不是我的真实IP。我在哪里弄错了吗?如何转发用户IP?

【问题讨论】:

  • 请运行此命令kubectl get svc ingress-nginx-controller -n ingress-nginx -o json | grep "externalTrafficPolicy" 以确保它已使用local 标志进行部署。当我部署您所描述的内容时,我得到了积极的结果。第一个内部IP,改成local后得到real客户端IP。
  • 通过运行你的命令我得到"externalTrafficPolicy": "Local" 你是如何测试real 客户端IP的?
  • 虽然我得到"f:externalTrafficPolicy": {}也是真的
  • 你可以做的就是尝试kubectl edit svc ingress-nginx-controller -n ingress-nginx,如果有Local而不是Cluster,那么它设置正确。但是在kubernetes documentation 中,它说supported in GCE/Google Kubernetes Engine environments),所以Oracle 云有可能无法识别这个标志并跳过它。您可以联系他们的支持部门进行询问。
  • 服务重启后,IP开始转发到我的节点应用程序。现在只是想弄清楚Ingress 也可以访问它。我会尽快更新答案,一旦我开始工作

标签: nginx kubernetes oracle-cloud-infrastructure


【解决方案1】:

当注释 service.beta.kubernetes.io/oci-load-balancer-backend-protocol: 未设置为 HTTP 时,我在启动负载平衡器服务时看到了类似的问题(无法看到真实 IP)。

我建议您尝试使用此注解启动 Ingress-Controller 服务,看看是否有什么不同。

【讨论】:

    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多