我已经为应用程序设置了入口,但想要将我的 IP 地址列入白名单。所以我创建了这个 Ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/whitelist-source-range: ${MY_IP}/32
name: ${INGRESS_NAME}
spec:
rules:
- host: ${DNS_NAME}
http:
paths:
- backend:
serviceName: ${SVC_NAME}
servicePort: ${SVC_PORT}
tls:
- hosts:
- ${DNS_NAME}
secretName: tls-secret
但是当我尝试访问它时,我得到了 403 禁止,并且在 nginx 日志记录中我看到了一个客户端 ip,但它来自集群节点之一,而不是我的家庭 ip。
我还使用此配置创建了一个配置映射:
data:
use-forwarded-headers: "true"
在容器中的 nginx.conf 中,我可以看到它已正确传递/配置,但我仍然收到 403 禁止,并且仍然只有来自集群节点的客户端 IP。
我在 AKS 集群上运行,nginx 入口控制器位于 Azure 负载均衡器后面。 nginx 入口控制器 svc 以负载均衡器类型公开,并锁定 svc 打开的节点端口。
我需要在 Nginx 中配置其他东西吗?
如果您已经安装了 nginx-ingress舵图,您可以简单地配置您的values.yaml
文件与controller.service.externalTrafficPolicy: Local
,我相信这将适用于您的所有服务。否则,您可以使用以下命令配置特定服务service.spec.externalTrafficPolicy: Local
对这些特定服务达到相同的效果。
以下是一些可以加深您理解的资源:
- k8s 文档 - 保留客户端源 IP
- k8s 文档 - 使用源 IP
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)