He configurado una entrada para una aplicación, pero quiero incluir mi dirección IP en la lista blanca. Así que creé este ingreso:
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-secretPero cuando trato de acceder a él, aparece un 403 prohibido y en el registro de nginx veo una IP de cliente, pero esa es de uno de los nodos del clúster y no de mi IP de inicio.
También creé un mapa de configuración con esta configuración:
data: use-forwarded-headers: "true"En nginx.conf en el contenedor, puedo ver que se ha transmitido/configurado correctamente, pero aún recibo un 403 prohibido con solo la IP del cliente del nodo del clúster.
Estoy ejecutando en un clúster de AKS y el controlador de entrada de nginx está detrás de un equilibrador de carga de Azure. El svc del controlador de entrada de nginx se expone como equilibrador de carga de tipo y se bloquea en el puerto de nodo abierto por el svc.
¿Necesito configurar algo más dentro de Nginx?
Si instaló nginx-ingress con Helm chart , simplemente puede configurar su archivo values.yaml con controller.service.externalTrafficPolicy: Local , que creo que se aplicará a todos sus Servicios. De lo contrario, puede configurar Servicios específicos con service.spec.externalTrafficPolicy: Local para lograr el mismo efecto en esos Servicios específicos.
Aquí hay algunos recursos para mejorar su comprensión:
Parece que tiene su controlador de entrada Nginx detrás de un servicio NodePort (o LoadBalancer), o más bien detrás de un kube-proxy. En general, para que su controlador vea la IP de conexión sin procesar, deberá implementarlo usando un puerto hostNetwork para que escuche directamente el tráfico entrante.