我已经为应用程序设置了一个入口,但想将我的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。
我还使用以下配置创建了一个configmap:
data:
use-forwarded-headers: "true"
在容器的nginx.conf中,我可以看到它已经正确传递/配置,但是仍然收到403禁止,仍然只有来自群集节点的客户端ip。
我正在AKS群集上运行,nginx入口控制器位于Azure负载平衡器的后面。 Nginx入口控制器svc作为类型的loadbalancer公开,并锁定在svc打开的节点端口上。
我需要在Nginx中配置其他内容吗?
答案 0 :(得分:1)
如果您已经在Helm chart上安装了nginx-ingress,则只需使用values.yaml
来配置controller.service.externalTrafficPolicy: Local
文件,我相信它将适用于所有服务。否则,您可以使用service.spec.externalTrafficPolicy: Local
配置特定的服务,以对那些特定的服务获得相同的效果。
这里有一些资源可以增进您的理解:
答案 1 :(得分:0)
听起来您的Nginx Ingress控制器位于NodePort(或LoadBalancer)服务的后面,或者位于kube-proxy的后面。通常,要让您的控制器查看原始连接IP,您需要使用hostNetwork端口进行部署,以便其直接侦听传入的流量。