Tengo un ingreso de nginx en Kubernetes con una lista blanca (gestionada por una anotación nginx.ingress.kubernetes.io/whitelist-source-range ) y también una asignación de puerto personalizada (que expone un puerto 22 del servidor SFTP a través de --tcp-services-configmap mapa de configuración). La lista blanca funciona muy bien para 80 y 443, pero no funciona para 22. ¿Cómo incluyo en la lista blanca mi puerto personalizado?
La configuración se ve más o menos así:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-ingress-controller namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx spec: ... spec: serviceAccountName: nginx-ingress-serviceaccount containers: - name: nginx-ingress-controller image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.33.0 args: - /nginx-ingress-controller - --configmap=$(POD_NAMESPACE)/nginx-configuration - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services - --udp-services-configmap=$(POD_NAMESPACE)/udp-services - --publish-service=$(POD_NAMESPACE)/ingress-nginx - --annotations-prefix=nginx.ingress.kubernetes.io ports: - name: http containerPort: 80 - name: https containerPort: 443 - name: sftp containerPort: 22 ... kind: Ingress metadata: name: {{ .controllerName }} annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/whitelist-source-range: {{ .ipAllowList }} kind: ConfigMap apiVersion: v1 metadata: name: tcp-services namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx data: 22: "default/sftp:22"ACTUALIZAR
Gracias a @jordanm, descubrí que puedo restringir las direcciones IP para todos los puertos a través de loadBalancerSourceRanges en LoadBalancer en lugar de nginx:
kind: Service apiVersion: v1 metadata: name: ingress-nginx namespace: ingress-nginx labels: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx spec: externalTrafficPolicy: Local type: LoadBalancer loadBalancerIP: {{ .loadBalancerIp }} selector: app.kubernetes.io/name: ingress-nginx app.kubernetes.io/part-of: ingress-nginx ports: - name: http port: 80 targetPort: http - name: https port: 443 targetPort: https - name: sftp port: 22 targetPort: sftp loadBalancerSourceRanges: {{ .ipAllowList }}En primer lugar, eche un vistazo a este problema: ip-whitelist-support .
Las IP no están en la lista blanca para los servicios TCP, una alternativa sería crear un firewall separado para los servicios TCP y agregar las IP en la lista blanca a nivel del firewall.
Para la ubicación específica {{ $path }} hemos definido {{ if isLocationAllowed $location }} .
Consulte la documentación oficial de Ingress: ingress-kubernetes .
Ingress expone las rutas HTTP y HTTPS desde fuera del clúster a los servicios dentro del clúster. El enrutamiento del tráfico está controlado por reglas definidas en el recurso Ingress.
Un Ingress no expone puertos o protocolos arbitrarios. La exposición de servicios distintos de HTTP y HTTPS a Internet suele utilizar un servicio de tipo Service.Type=NodePort o Service.Type=LoadBalancer.
Debe tener un controlador de Ingress para satisfacer un Ingress. Solo crear un recurso de Ingress no tiene efecto.
En este caso, el controlador de ingreso del instrumento de recursos de Ingress cómo manejar las solicitudes http/https. En este enfoque, el controlador nginx-ingress como software (introducir funcionalidad de nivel 7/equilibrio de carga).
Si está interesado en la compatibilidad con nginx ingress tcp:
Ingress no admite servicios TCP o UDP. Por esta razón, este controlador de Ingress usa las banderas --tcp-services-configmap y --udp-services-configmap
Ver: exponer-tcp-udp-servicios
Si desea verificar una configuración más granular mientras trabaja con su servicio tcp, debe considerar usar la configuración de firewall/equilibrio de carga L4 proporcionada por su proveedor de nube.