Necesito configurar un puerto TCP en mi clúster de AKS para permitir que RabbitMQ funcione
Instalé nginx-ingress con helm de la siguiente manera:
kubectl create namespace ingress-basic helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm install nginx-ingress ingress-nginx/ingress-nginx \ --namespace ingress-basic \ --set controller.replicaCount=2 \ --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \ --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \ --set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linuxConfiguré un registro A con nuestro proveedor de DNS para apuntar a la IP pública del controlador de ingreso.
He creado un secreto TLS (para habilitar https)
He creado una ruta de ingreso con:
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: rabbit-ingress namespace: default annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: tls: - hosts: - my.domain.com secretName: tls-secret rules: - http: paths: - backend: serviceName: rabbitmq-cluster servicePort: 15672 path: /(.*)Puedo navegar a mi clúster a través del nombre de dominio desde el exterior y ver el panel de control (internamente en 15672) con https válido. Entonces, el ingreso está en funcionamiento, y puedo crear colas, etc., por lo que rabbitmq funciona correctamente.
Sin embargo, no puedo hacer que la parte TCP funcione para publicar en las colas desde fuera del clúster.
Edité el yaml de lo que creo que es el mapa de configuración (azure - clúster - configuración - nginx-ingress-ingress-nginx-controller) para el controlador (nginx-ingress-ingress-nginx-controller) a través de la interfaz del portal azul y agregué esto al final
data: '5672': 'default/rabbitmq-cluster:5672'Luego edité ellos yaml para el servicio en sí a través del portal azul y agregué esto al final
- name: amqp protocol: TCP port: 5672Sin embargo, cuando trato de acceder a mi dominio usando un cliente de prueba, la solicitud simplemente se agota. (El cliente funcionó cuando usé un LoadBalancer y simplemente presioné la IP externa del clúster, por lo que sé que el código del cliente debería funcionar)
¿Hay otro paso que debería estar haciendo?
Creo que el problema aquí era que helm estaba configurando muchas de mis propias cosas que no podía personalizar demasiado.
Desinstalé el ingreso con helm y cambié el script de creación de ingreso a esto:
helm install nginx-ingress ingress-nginx/ingress-nginx \ --namespace ingress-basic \ --set controller.replicaCount=2 \ --set controller.nodeSelector."beta\.kubernetes\.io/os"=linux \ --set defaultBackend.nodeSelector."beta\.kubernetes\.io/os"=linux \ --set controller.admissionWebhooks.patch.nodeSelector."beta\.kubernetes\.io/os"=linux \ --set tcp.5672="default/rabbitmq-cluster:5672"Lo cual preconfigura el reenvío de puertos TCP y no tengo que hacer nada más. No sé si lo afectó, pero esto pareció 'romper' mi implementación de SSL, así que actualicé el script de creación de ruta de ingreso de v1beta a v1 y https volvió a funcionar perfectamente.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: rabbit-ingress namespace: default annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: tls: - hosts: - my.domain.com secretName: tls-secret rules: - host: my.domain.com http: paths: - path: /(.*) pathType: Prefix backend: service: name: rabbitmq-cluster port: number: 15672