Compartir a través de


Exposición de servicios de Kubernetes a dispositivos externos

Si trabaja con aplicaciones de Kubernetes, es posible que tenga que hacer que los servicios de Kubernetes sean accesibles para dispositivos externos para que puedan interactuar con las cargas de trabajo que ha implementado. En este artículo se explica cómo exponer los servicios de Kubernetes que se ejecutan en un clúster de AKS Edge Essentials en dispositivos externos. En función de la configuración de red que usó para configurar el clúster de Kubernetes, hay dos maneras diferentes de exponer los servicios:

  1. Clúster de una sola máquina con reenvío de puertos.
  2. Clúster escalable con conmutador virtual externo.

Nota:

Si usa servicios de Kubernetes, asegúrese de configurar los parámetros y Init.ServiceIPRangeStart durante la Init.ServiceIPRangeSize implementación. Para más información, consulte Parámetros JSON de configuración de implementación.

Opción 1: clúster de una sola máquina con reenvío de puertos

La configuración del clúster de una sola máquina de AKS Edge Essentials usa un conmutador virtual interno para administrar las redes. Este modificador garantiza que toda la comunicación entre el sistema operativo host de Windows y el nodo Linux/Windows se realiza mediante una red interna a la que no pueden acceder los dispositivos externos. Para más información sobre las redes de AKS Edge Essentials, consulta Redes de AKS Edge Essentials.

Si necesita acceder a un servicio de Kubernetes desde dispositivos externos, configure el reenvío de puertos desde el sistema operativo host de Windows al nodo Linux o Windows. Si usa un servicio de Kubernetes de tipo LoadBalancer, asegúrese de obtener el ServiceIp correcto mediante el kubectl get services comando . Si usa un servicio de Kubernetes de tipo ClusterIp o NodePort, use la dirección IP del nodo Linux/Windows Kubernetes.

Para configurar el reenvío de puertos, puede usar el netsh cmdlet . Para obtener más información sobre la netsh sintaxis de comandos, los contextos y el formato, consulte Sintaxis de comandos de Netsh, contextos y formato. Siga estos pasos para configurar el reenvío de puertos:

  1. Abra una sesión de PowerShell con privilegios elevados.

  2. Habilite un puerto de regla de firewall para el puerto externo del sistema operativo host de Windows. Para obtener más información, consulte New-NetFirewallRule:

    New-NetFirewallRule -DisplayName "<name-for-rule>" -Direction Inbound -LocalPort <Windows-host-OS-external-port> -Action Allow
    
  3. Obtenga la dirección IP del servicio de destino en el espacio de nombres:

    kubectl get service -n <namespace>
    
  4. Configure el reenvío de puertos desde el puerto del sistema operativo host de Windows a la dirección IP y el puerto del servicio Kubernetes:

    Parámetro Descripción
    listen-port Puerto IPv4 del so host de Windows que usan los dispositivos externos para comunicarse con el servicio Kubernetes.
    listen-address Especifica la dirección IPv4 para la que se va a escuchar en el sistema operativo host de Windows. Si no se especifica una dirección, el valor predeterminado es el equipo local.
    connect-port Especifica el puerto IPv4 al que redirigir el tráfico. Este puerto debe ser el puerto de servicio de Kubernetes.
    connect-address Especifica la dirección IPv4 a la que redirigir el tráfico. Este puerto debe ser la dirección IP del servicio Kubernetes.
    netsh interface portproxy add v4tov4 listenport=<listen-port> listenaddress=<listen-address> connectport=<connect-port> connectaddress=<connect-address>
    

En la ilustración de ejemplo siguiente, hay dos servicios de Kubernetes que se ejecutan en un dispositivo Windows con la dirección IPv4 10.0.0.2 :

  • Linux-Svc que ejecuta un servicio NodePort con la dirección IP del nodo 192.168.0.2 de Linux y el puerto 30034. Este servicio debe ser accesible por el puerto 8080 en el sistema operativo host de Windows.
  • Win-Svc que se ejecuta como un servicio LoadBalancer con dirección 192.168.0.5 IP y puerto 30035. Este servicio debe ser accesible por el puerto 8081 en el sistema operativo host de Windows.

Para habilitar los dispositivos externos que acceden a estos servicios, configure el reenvío de puertos para ambos servicios. Para este escenario, ejecute los siguientes comandos:

netsh interface portproxy add v4tov4 listenport=8080 listenaddress=10.0.0.2 connectport=30034 connectaddress=192.168.0.2
netsh interface portproxy add v4tov4 listenport=8081 listenaddress=10.0.0.2 connectport=30035 connectaddress=192.168.0.5

Captura de pantalla que muestra el reenvío de puertos de red interno.

Advertencia

Si no usa una configuración de red estática, la dirección IPv4 del sistema operativo host de Windows podría cambiar. Esto puede afectar a las configuraciones de reenvío de puertos y a la dirección IPv4 de destino que usan los dispositivos externos. Para minimizar el impacto de un cambio de dirección IPv4, puede usar un elemento más genérico listenaddress.

Opción 2: clúster escalable con conmutador virtual externo

La configuración de clúster escalable de AKS Edge Essentials usa un conmutador virtual externo para administrar las redes. Dado que los nodos se ejecutan dentro de diferentes dispositivos, todos los nodos deben estar conectados a la misma red para comunicarse entre sí. Para más información sobre las redes de AKS Edge Essentials, consulta Redes de AKS Edge Essentials.

En esta configuración, los nodos de Kubernetes están conectados a la red externa, por lo que los dispositivos externos pueden acceder a los servicios de Kubernetes sin necesidad de reenvío de puertos. Siguiendo las instrucciones de la opción 1, si usa un servicio de Kubernetes de tipo LoadBalancer, asegúrese de obtener el ServiceIp correcto mediante el kubectl get services comando . Si usa un servicio de Kubernetes de tipo ClusterIp o NodePort, use la dirección IP del nodo Linux/Windows Kubernetes.

Nota:

Es posible mantener el clúster escalable en un dispositivo y usar la configuración del conmutador virtual externo para exponer los servicios de Kubernetes directamente a dispositivos externos en la red externa sin necesidad de reenvío de puertos.

Pasos siguientes