es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Obtener el DOMINIO para el Servidor TCP de Kubernetes detrás de NGINX Ingress.

Tengo un servidor que utiliza un protocolo TCP personalizado. Se accede a través de un subdominio como sub1.mydomain.com y el servidor necesita saber qué subdominio se está utilizando para acceder a él.
Dada la siguiente infraestructura, ¿cómo podrías determinar el nombre del dominio y del subdominio desde dentro del Pod de Kubernetes en ejecución?

[Balancer de Carga Clásico de AWS] ->

[Controlador de Ingress de Nginx de Kubernetes] ->

[Servicio de Kubernetes] ->

[Implementación de Kubernetes]

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para determinar el nombre de dominio y el subdominio desde dentro del Pod en ejecución de Kubernetes, puedes utilizar las variables de entorno especiales proporcionadas por el controlador de ingreso de Nginx de Kubernetes. Específicamente, las variables de entorno NGINX_INGRESS_CONTROLLER_SERVICE_HOST y NGINX_INGRESS_CONTROLLER_SERVICE_PORT se pueden usar para construir la URL de la solicitud entrante.

    Suponiendo que el subdominio se especifica en la solicitud entrante como un nombre de host, puedes extraerlo de la URL de la solicitud y pasarlo al servidor como un encabezado TCP personalizado. Aquí tienes un ejemplo de configuración para la implementación de Kubernetes que ejecuta el servidor TCP personalizado:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-tcp-server
    spec:
      selector:
        matchLabels:
          app: my-tcp-server
      template:
        metadata:
          labels:
            app: my-tcp-server
        spec:
          containers:
          - name: my-tcp-server
            image: my-tcp-server:latest
            env:
              - name: SUBDOMAIN_HEADER
                value: "X-Subdomain"
            args:
              - "--subdomain-header=$(SUBDOMAIN_HEADER)"
              - "--port=1234"
    

    En este ejemplo, hemos agregado una variable de entorno llamada SUBDOMAIN_HEADER que especifica el nombre del encabezado TCP personalizado a utilizar para el subdominio. También hemos pasado esta variable de entorno al servidor como un argumento de línea de comandos, junto con el número de puerto en el que escuchar.

    Para extraer el subdominio de la URL de la solicitud entrante y pasarlo al servidor como un encabezado TCP personalizado, puedes utilizar la siguiente configuración para el controlador de ingreso de Nginx de Kubernetes:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: my-ingress
      annotations:
        nginx.ingress.kubernetes.io/tcp-services: "my-tcp-service"
        nginx.ingress.kubernetes.io/tcp-ports: "1234"
    spec:
      rules:
      - host: sub1.mydomain.com
        http:
          paths:
          - backend:
              serviceName: my-tcp-service
              servicePort: 1234
    

    En este ejemplo, hemos agregado anotaciones al recurso Ingress para especificar el servicio TCP a utilizar (my-tcp-service) y el número de puerto (1234). También hemos especificado el subdominio a coincidir (sub1.mydomain.com). Cuando se recibe una solicitud TCP entrante con este nombre de host, el controlador de ingreso de Nginx extraerá el subdominio y lo pasará al servidor como un encabezado TCP personalizado utilizando el nombre de encabezado especificado en la variable de entorno SUBDOMAIN_HEADER.

Comments are closed.