Compartir a través de


Compatibilidad del proxy HTTP en Azure Kubernetes Service (AKS)

En este artículo, aprenderá a configurar clústeres de Azure Kubernetes Service (AKS) para usar un proxy HTTP para el acceso saliente a Internet.

Los clústeres de AKS implementados en redes virtuales administradas o personalizadas tienen determinadas dependencias salientes necesarias para funcionar correctamente, lo que creaba problemas en entornos que requieren acceso a Internet para enrutarse a través de proxies HTTP. Los nodos no tenían ninguna manera de arrancar la configuración, las variables de entorno y los certificados necesarios para acceder a los servicios de Internet.

La característica proxy HTTP agrega compatibilidad con el proxy HTTP a los clústeres de AKS y expone una interfaz sencilla que puede usar para proteger el tráfico de red requerido por AKS en entornos dependientes del proxy. Con esta característica, los nodos y pods de AKS están configurados para usar el proxy HTTP. La característica también permite la instalación de una entidad de certificación de confianza en los nodos como parte del arranque de un clúster. Es posible que las soluciones más complejas requieran la creación de una cadena de confianza para establecer comunicaciones protegidas a través de la red.

Limitaciones y consideraciones

No se admiten los siguientes escenarios:

  • Diferentes configuraciones de proxy por grupo de nodos
  • Autenticación de contraseña/usuario
  • Entidades de certificación (CA) personalizadas para la comunicación del servidor de API
  • Clústeres de AKS con grupos de nodos de Windows
  • Grupos de nodos que usan conjuntos de disponibilidad de máquinas virtuales (VMAS)
  • Uso de * como carácter comodín adjunto a un sufijo de dominio para noProxy

httpProxy, httpsProxy y trustedCa no tienen ningún valor de forma predeterminada. Los pods se insertan con las siguientes variables de entorno:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

Para deshabilitar la inserción de las variables de entorno de proxy, debe anotar el pod con "kubernetes.azure.com/no-http-proxy-vars":"true".

Antes de empezar

Creación de un archivo de configuración con valores de proxy HTTP

Cree un archivo y proporcione valores para httpProxy, httpsProxy y noProxy. Si el entorno lo requiere, especifique un valor para trustedCa.

El esquema del archivo de configuración tiene el siguiente aspecto:

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}

Revise los requisitos de cada parámetro:

  • httpProxy: dirección URL de proxy que se usará para crear conexiones HTTP fuera del clúster. El esquema de dirección URL debe ser http.
  • httpsProxy: dirección URL de proxy que se usará para crear conexiones HTTPS fuera del clúster. Si no se especifica, se usa httpProxy para las conexiones HTTP y HTTPS.
  • noProxy: lista de nombres de dominio de destino, dominios, direcciones IP u otros CIDR de red para excluir el proxy.
  • trustedCa: cadena que contiene el contenido del certificado de entidad de certificación alternativo base64 encoded. Actualmente solo se admite el formato PEM.

Importante

Para la compatibilidad con los componentes basados en Go que forman parte del sistema de Kubernetes, el certificado debe admitir Subject Alternative Names(SANs) en lugar de los certificados de nombre común en desuso.

Hay diferencias en las aplicaciones sobre cómo cumplir con la variable de entorno http_proxy, https_proxy y no_proxy. Curl y Python no admiten CIDR en no_proxy, pero Ruby sí.

Entrada de ejemplo:

{
  "httpProxy": "http://myproxy.server.com:8080", 
  "httpsProxy": "https://myproxy.server.com:8080", 
  "noProxy": [
    "localhost",
    "127.0.0.1"
  ],
  "trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...S0tLS0="
}

Creación de un clúster con una configuración de proxy HTTP mediante la CLI de Azure

Puede configurar un clúster de AKS con una configuración de proxy HTTP durante la creación del clúster.

  1. Use el comando y pase la az aks create configuración como un archivo JSON.

    az aks create \
        --name $clusterName \
        --resource-group $resourceGroup \
        --http-proxy-config aks-proxy-config.json \
        --generate-ssh-keys
    

    El clúster debe inicializarse con el proxy HTTP configurado en los nodos.

  2. Compruebe que la configuración del proxy HTTP está en los pods y nodos comprobando que las variables de entorno contienen los valores adecuados para http_proxy, https_proxyy no_proxy mediante el kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Para validar que las variables de proxy están establecidas en los pods, puede comprobar las variables de entorno presentes en los nodos.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Actualización de una configuración de proxy HTTP

Puede actualizar las configuraciones de proxy HTTP en clústeres existentes, entre las que se incluyen:

  • Actualización de un clúster existente para habilitar el proxy HTTP y agregar una nueva configuración de proxy HTTP.
  • Actualizar un clúster existente para cambiar una configuración de proxy HTTP.

Consideraciones sobre la actualización del proxy HTTP

El --http-proxy-config parámetro debe establecerse en un nuevo archivo JSON con valores actualizados para httpProxy, httpsProxy, noProxyy trustedCa si es necesario. La actualización inserta nuevas variables de entorno en pods con los nuevos valores httpProxy, httpsProxy o noProxy. Los pods deben girarse para que las aplicaciones lo detecten, porque los valores de las variables de entorno los inyecta un webhook de admisión mutante.

Nota:

Si cambia a un nuevo proxy, el nuevo proxy ya debe existir para que la actualización se realice correctamente. Una vez completada la actualización, puede eliminar el proxy anterior.

Actualización de un clúster para actualizar o habilitar el proxy HTTP

  1. Habilite o actualice las configuraciones de proxy HTTP en un clúster existente mediante el az aks update comando .

    Por ejemplo, supongamos que ha creado un nuevo archivo con la cadena codificada en base64 del nuevo certificado de autoridad certificadora llamado aks-proxy-config-2.json. Puede actualizar la configuración del proxy en el clúster con el siguiente comando:

    az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json
    

Precaución

AKS reconfigura automáticamente todos los grupos de nodos del clúster al actualizar la configuración del proxy en el clúster mediante el comando az aks update. Puede usar los Presupuestos de Disrupción de Pods (PDB) para evitar la disrupción de pods críticos durante la reimagen.

  1. Compruebe que la configuración del proxy HTTP está en los pods y nodos comprobando que las variables de entorno contienen los valores adecuados para http_proxy, https_proxyy no_proxy mediante el kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Para validar que las variables de proxy están establecidas en los pods, puede comprobar las variables de entorno presentes en los nodos.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Deshabilitación del proxy HTTP en un clúster existente (versión preliminar)

Instala la extensión aks-preview

  1. Instale la extensión aks-preview Azure CLI mediante el comando az extension add.

    Importante

    Las características en versión preliminar de AKS están disponibles a elección del usuario y en régimen de autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

    az extension add --name aks-preview
    
  2. Actualiza a la última versión de la extensión mediante el comando az extension update. Deshabilitar el proxy HTTP requiere un mínimo de 18.0.0b13.

    az extension update --name aks-preview
    

Registrar DisableHTTPProxyPreview marca de características

  1. Registre la marca de características de DisableHTTPProxyPreview mediante el comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Comprobar el estado del registro mediante el comando az feature show. Tarda unos minutos en que el estado muestre Registrado.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Actualización del clúster para deshabilitar el proxy HTTP (versión preliminar)

  1. Actualice el clúster para deshabilitar el proxy HTTP mediante el comando az aks update con la opción --disable-http-proxy.

    az aks update --name $clusterName --resource-group $resourceGroup --disable-http-proxy
    

Precaución

AKS reconfigura automáticamente todos los grupos de nodos del clúster al actualizar la configuración del proxy en el clúster mediante el comando az aks update. Puede usar los Presupuestos de Disrupción de Pods (PDB) para evitar la disrupción de pods críticos durante la reimagen.

  1. Compruebe que el proxy HTTP está deshabilitado, validando que la configuración del proxy HTTP no está establecida en los pods y nodos mediante el comando kubectl describe pod.

    kubectl describe {any pod} -n kube-system
    

    Para validar que las variables de proxy no están establecidas en pods, puede comprobar las variables de entorno presentes en los nodos.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Volver a habilitar el proxy HTTP en un clúster existente

Al crear un clúster, el proxy HTTP está habilitado de forma predeterminada. Una vez deshabilitado el proxy HTTP en un clúster, la configuración del proxy se guarda en la base de datos, pero las variables de proxy se quitan de los pods y nodos.

Para volver a habilitar el proxy HTTP en un clúster existente, use el comando az aks update con el indicador --enable-http-proxy.

az aks update --name $clusterName --resource-group $resourceGroup --enable-http-proxy

Precaución

AKS reconfigura automáticamente todos los grupos de nodos del clúster al actualizar la configuración del proxy en el clúster mediante el comando az aks update. Puede usar los Presupuestos de Disrupción de Pods (PDB) para evitar la disrupción de pods críticos durante la reimagen.

Importante

Si tenía una configuración de proxy HTTP en el clúster antes de deshabilitarla, la configuración de proxy HTTP existente se aplica automáticamente al volver a habilitar el proxy HTTP en ese clúster. Se recomienda comprobar la configuración para asegurarse de que cumple los requisitos actuales antes de continuar. Si desea cambiar la configuración del proxy HTTP después de volver a habilitar el proxy HTTP, siga los pasos para actualizar la configuración del proxy HTTP en un clúster existente.

Configuración de una configuración de proxy HTTP mediante una plantilla de Azure Resource Manager (ARM)

Puede implementar un clúster de AKS con un proxy HTTP mediante una plantilla de ARM.

  1. Revise los requisitos de cada parámetro:

    • httpProxy: dirección URL de proxy que se usará para crear conexiones HTTP fuera del clúster. El esquema de dirección URL debe ser http.
    • httpsProxy: dirección URL de proxy que se usará para crear conexiones HTTPS fuera del clúster. Si no se especifica, se usa httpProxy para las conexiones HTTP y HTTPS.
    • noProxy: lista de nombres de dominio de destino, dominios, direcciones IP u otros CIDR de red para excluir el proxy.
    • trustedCa: cadena que contiene el contenido del certificado de entidad de certificación alternativo base64 encoded. Actualmente solo se admite el formato PEM.

    Importante

    Para la compatibilidad con los componentes basados en Go que forman parte del sistema de Kubernetes, el certificado debe admitir Subject Alternative Names (SANs) en lugar de los certificados de nombre común en desuso.

    Hay diferencias en las aplicaciones sobre cómo cumplir con la variable de entorno http_proxy, https_proxy y no_proxy. Curl y Python no admiten CIDR en no_proxy, pero Ruby sí.

  2. Cree una plantilla con parámetros de proxy HTTP. En la plantilla, proporcione valores para httpProxy, httpsProxy y noProxy. Si fuera necesario, especifique también un valor para trustedCa. El mismo esquema usado para la implementación de la CLI existe en la definición Microsoft.ContainerService/managedClusters en "properties", como se muestra en el ejemplo siguiente:

    "properties": {
        ...,
        "httpProxyConfig": {
          "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  3. Implemente la plantilla de ARM con la configuración del proxy HTTP. El clúster debe inicializarse con el proxy HTTP configurado en los nodos.

Actualización de una configuración de proxy HTTP

Puede actualizar las configuraciones de proxy HTTP en clústeres existentes, entre las que se incluyen:

  • Actualización de un clúster existente para habilitar el proxy HTTP y agregar una nueva configuración de proxy HTTP.
  • Actualizar un clúster existente para cambiar una configuración de proxy HTTP.

Consideraciones sobre la actualización del proxy HTTP

El --http-proxy-config parámetro debe establecerse en un nuevo archivo JSON con valores actualizados para httpProxy, httpsProxy, noProxyy trustedCa si es necesario. La actualización inserta nuevas variables de entorno en pods con los nuevos valores httpProxy, httpsProxy o noProxy. Los pods deben girarse para que las aplicaciones lo detecten, porque los valores de las variables de entorno los inyecta un webhook de admisión mutante.

Nota:

Si cambia a un nuevo proxy, el nuevo proxy ya debe existir para que la actualización se realice correctamente. Una vez completada la actualización, puede eliminar el proxy anterior.

Actualización de una plantilla de ARM para configurar el proxy HTTP

  1. En la plantilla, proporcione nuevos valores para httpProxy, httpsProxyy noProxy. Si fuera necesario, especifique también un valor para trustedCa.

    El mismo esquema usado para la implementación de la CLI existe en la definición Microsoft.ContainerService/managedClusters en "properties", como se muestra en el ejemplo siguiente:

    "properties": {
        ...,
        "httpProxyConfig": {
            "enabled": "true",
            "httpProxy": "string",
            "httpsProxy": "string",
            "noProxy": [
                "string"
            ],
            "trustedCa": "string"
        }
    }
    
  2. Implemente la plantilla de ARM con la configuración actualizada del proxy HTTP.

Precaución

AKS reconfigura automáticamente todos los grupos de nodos del clúster al actualizar la configuración del proxy en el clúster mediante el comando az aks update. Puede usar los Presupuestos de Disrupción de Pods (PDB) para evitar la disrupción de pods críticos durante la reimagen.

  1. Compruebe que la configuración del proxy HTTP está en los pods y nodos comprobando que las variables de entorno contienen los valores adecuados para http_proxy, https_proxyy no_proxy mediante el kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Para validar que las variables de proxy están establecidas en los pods, puede comprobar las variables de entorno presentes en los nodos.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Deshabilitación del proxy HTTP en un clúster existente mediante una plantilla de ARM (versión preliminar)

Instala la extensión aks-preview

  1. Instale la extensión aks-preview Azure CLI mediante el comando az extension add.

    Importante

    Las características en versión preliminar de AKS están disponibles a elección del usuario y en régimen de autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

    az extension add --name aks-preview
    
  2. Actualiza a la última versión de la extensión mediante el comando az extension update. Deshabilitar el proxy HTTP requiere un mínimo de 18.0.0b13.

    az extension update --name aks-preview
    

Registrar DisableHTTPProxyPreview marca de características

  1. Registre la marca de características de DisableHTTPProxyPreview mediante el comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  2. Comprobar el estado del registro mediante el comando az feature show. Tarda unos minutos en que el estado muestre Registrado.

    az feature show --namespace Microsoft.ContainerService --name DisableHTTPProxyPreview
    
  3. Cuando aparezca el estado Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el comando az provider register.

    az provider register --namespace Microsoft.ContainerService
    

Actualización del clúster para deshabilitar el proxy HTTP

  1. Actualice la plantilla ARM del clúster para deshabilitar el proxy HTTP estableciendo enabled en false. El mismo esquema usado para la implementación de la CLI existe en la definición Microsoft.ContainerService/managedClusters en "properties", como se muestra en el ejemplo siguiente:

    "properties": {
        ...,
        "httpProxyConfig": {
           "enabled": "false",
        }
    }
    
  2. Implemente la plantilla de ARM con el proxy HTTP deshabilitado.

Precaución

AKS reconfigura automáticamente todos los grupos de nodos del clúster al actualizar la configuración del proxy en el clúster mediante el comando az aks update. Puede usar los Presupuestos de Disrupción de Pods (PDB) para evitar la disrupción de pods críticos durante la reimagen.

  1. Compruebe que el proxy HTTP está deshabilitado validando que la configuración del proxy HTTP no está establecida en los pods y nodos mediante el kubectl describe pod comando .

    kubectl describe {any pod} -n kube-system
    

    Para validar que las variables de proxy no están establecidas en pods, puede comprobar las variables de entorno presentes en los nodos.

    kubectl get nodes
    kubectl node-shell {node name}
    cat /etc/environment
    

Volver a habilitar el proxy HTTP en un clúster existente

Al crear un clúster, el proxy HTTP está habilitado de forma predeterminada. Una vez deshabilitado el proxy HTTP en un clúster, ya no puede agregar configuraciones de proxy HTTP a ese clúster.

Si desea volver a habilitar el proxy HTTP, siga los pasos para actualizar una configuración de proxy HTTP mediante una plantilla de ARM.


Proxy HTTP del complemento Istio para servicios externos

Si usa el complemento de malla de servicio basado en Istio para AKS, debe crear una entrada de servicio para permitir que las aplicaciones de la malla accedan a recursos externos o no clúster a través del proxy HTTP.

Por ejemplo:

apiVersion: networking.istio.io/v1
kind: ServiceEntry
metadata:
    name: proxy
spec:
    hosts:
    - my-company-proxy.com # ignored
    addresses:
    - $PROXY_IP/32
    ports:
    - number: $PROXY_PORT
        name: tcp
        protocol: TCP
    location: MESH_EXTERNAL
  1. Cree un archivo y proporcione valores para PROXY_IP y PROXY_PORT.

  2. Puede implementar la entrada de servicio mediante:

    kubectl apply -f service_proxy.yaml
    

Configuración del complemento de supervisión

El proxy HTTP con el complemento de supervisión admite las siguientes configuraciones:

  • Proxy de salida sin autenticación
  • Proxy de salida con certificado de confianza para el punto de conexión de Log Analytics

No se admite la siguiente configuración:

  • Métricas personalizadas y características de alertas recomendadas al usar un proxy con certificados de confianza

Pasos siguientes

Para obtener más información sobre los requisitos de red de los clústeres de AKS, consulte Control del tráfico de salida para los nodos de clúster en AKS.