【发布时间】: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