Share via


Implementación de un clúster de Kubernetes en una red virtual personalizada en Azure Stack Hub

Los clústeres de Kubernetes se pueden implementar mediante el motor de Azure Kubernetes Service (AKS) en una red virtual personalizada. En este artículo se examina la búsqueda de la información que se necesita en una red virtual. Puede encontrar los pasos necesarios para calcular las direcciones IP que usa el clúster y establecer los valores en el modelo de API, así como establecer la tabla de rutas y el grupo de seguridad de red.

El clúster de Kubernetes en Azure Stack Hub mediante el motor de AKS usa el complemento de red kubenet. El motor de AKS en Azure Stack Hub también admite el complemento de red de Azure CNI.

Restricciones al crear una red virtual personalizada

  • La red virtual personalizada debe estar en la misma suscripción que todos los demás componentes del clúster de Kubernetes.
  • El grupo de nodos del plano de control y el grupo de nodos del agente deben estar en la misma red virtual. Se pueden implementar los nodos en subredes diferentes dentro de la misma red virtual.
  • La subred del clúster de Kubernetes debe usar un intervalo de direcciones IP dentro del espacio del intervalo de direcciones IP de la red virtual personalizada; consulte Obtención del bloque de direcciones IP.
  • Tenga en cuenta que el tamaño recomendado de las subredes de nodo depende del tipo de complemento de red que se esté utilizando. Como guía general, Azure CNI requiere un mayor número de direcciones IP para la subred que admite los grupos de nodos de agente que kubenet. Consulte los ejemplos de kubenet y Azure CNI que se muestran a continuación.
  • El espacio de direcciones de 169.254.0.0/16 no se puede utilizar para redes virtuales personalizadas para los clústeres de Kubernetes.

Creación de una red virtual personalizada

Debe tener una red virtual personalizada en su instancia de Azure Stack Hub. Para más información, consulte Inicio rápido: Creación de una red virtual mediante Azure Portal.

Cree una subred en la red virtual. Tendrá que obtener el identificador de recurso de la subred y el intervalo de direcciones IP. Tanto el identificador de recurso como el intervalo los usará en el modelo de API al implementar el clúster.

  1. Abra el portal de usuarios de Azure Stack Hub en la instancia de Azure Stack Hub.

  2. Seleccione Todos los recursos.

  3. Escriba el nombre de la red virtual en el cuadro de búsqueda.

  4. Seleccione Subredes+ Subredes para agregar una subred.

  5. Especifique los valores correspondientes en los campos Nombre e Intervalo de direcciones, para lo que debe usar la notación CIDR. Seleccione Aceptar.

  6. Seleccione Propiedades en la hoja Redes virtuales. Copie el valor del campo Id. de recurso y agregue . Este valor se usará para la clave vnetSubnetId en el modelo de API del clúster. El identificador de recurso de la subred usa el siguiente formato:
    /subscriptions/SUB_ID/resourceGroups/RG_NAME/providers/Microsoft.Network/virtualNetworks/VNET_NAME/subnets/SUBNET_NAME

    Identificador de recurso de red virtual

  7. Seleccione Subredes en la hoja Redes virtuales. Seleccione el nombre de la subred, por ejemplo, control-plane-sn.

    No asocie la subred a un grupo de seguridad de red (NSG).

    Bloque CIDR de la red virtual

  8. En la hoja de la subred, anote el intervalo de direcciones (bloque CIDR) de cada subred.

Consideraciones para seleccionar un espacio de direcciones

Al crear una red virtual personalizada, especifique el espacio de direcciones IP de la red y un intervalo de direcciones IP para cada subred. Tenga en cuenta los siguientes factores al elegir los espacios de direcciones y los intervalos que se usarán en el clúster de Kubernetes:

  • Los espacios de direcciones superpuestos pueden dar lugar a conflictos de direcciones IP o errores de comunicación. Para reducir el riesgo de que las direcciones IP se superpongan, elija un espacio de direcciones único para la nueva red virtual.
  • Los espacios de direcciones en los intervalos 10/8, 172.16/12 y 192.168/16 se usan a menudo para redes privadas, y la infraestructura existente del centro de datos también los puede usar. Si las aplicaciones de Kubernetes usan recursos del centro de datos, reduzca el riesgo de conflictos mediante la elección de un espacio de direcciones para la red virtual personalizada que sea diferente del espacio de direcciones del centro de datos.
  • Se recomienda usar una subred dedicada para el clúster de Kubernetes.
  • Si usa varias redes virtuales existentes, considere la posibilidad de usar espacios de direcciones diferentes en cada red si piensa usar el emparejamiento de red virtual. La superposición de los espacios de direcciones puede afectar la capacidad de habilitar el emparejamiento.

Obtención del bloque de direcciones IP

El motor de AKS admite la implementación en una red virtual existente. Cuando se implementa en una red virtual existente, el clúster usa bloques de direcciones consecutivas para nodos de agente, nodos del plano de control, servicios de clúster y contenedores (pods). Cada bloque de direcciones se puede traducir en una subred dentro de la red virtual. Todos los bloques de direcciones de la implementación del clúster deben formar parte del espacio de direcciones de red virtual general. La elección de bloques de direcciones fuera del espacio de direcciones de la red virtual puede dar lugar a problemas de conectividad.

Se requieren un mínimo de tres bloques de direcciones al configurar un clúster de Kubernetes:

  • Bloque de direcciones de nodos: este es el bloque de direcciones que se usa para asignar direcciones a los nodos de clúster. Puede ser un bloque de direcciones único para todos los nodos del clúster o pueden ser bloques independientes (subredes) para los grupos del plano de control y del agente. Al seleccionar el intervalo de direcciones de este bloque, debe tener en cuenta el número de nodos del clúster. Con Azure CNI, los nodos y los contenedores obtienen sus direcciones del mismo bloque de direcciones. Por lo tanto, cuando use Azure CNI, considere la cantidad de contenedores que desea implementar en su clúster al elegir el intervalo de direcciones.
  • Bloque de direcciones de servicios: este es el bloque de direcciones desde el que los servicios implementados en el clúster de Kubernetes obtendrán su dirección de clúster. Cuando seleccione el intervalo de direcciones para este bloque, tenga en cuenta el número máximo de servicios que piensa ejecutar en el clúster.
  • Bloque de direcciones del clúster: este es el bloque de direcciones del que los pods obtendrán su dirección de clúster. Cuando seleccione el intervalo de direcciones para este bloque, tenga en cuenta el número máximo de pods que piensa ejecutar en el clúster. Como se mencionó anteriormente, con Azure CNI, los bloques de direcciones de clúster y nodos son los mismos.

Además de los bloques de direcciones, para los nodos del plano de control deberá establecer dos valores más. Necesitará saber el número de direcciones IP que tendrá que reservar para el clúster y la primera IP estática consecutiva dentro del espacio de IP de la subred. El motor de AKS requiere un intervalo de hasta 16 direcciones IP sin usar cuando se usan varios nodos del plano de control. El clúster usará una dirección IP para cada plano de control hasta cinco nodos del plano de control. El motor de AKS también requerirá la siguiente dirección IP 10 después del último nodo del plano de control para la reserva de direcciones IP de la sala principal. Por último, el equilibrador de carga usará otra dirección IP después de los nodos del plano de control y la reserva de espacio principal, para un total de 16. Al colocar su bloque de direcciones IP, la subred requiere las siguientes asignaciones de las direcciones IP existentes:

  • Las cuatro primeras direcciones IP y la última dirección IP están reservadas y no se pueden usar en ninguna subred de Azure.
  • Debe dejarse abierto un búfer de 16 direcciones IP.
  • El valor de la primera dirección IP del clúster debe estar hacia el final del espacio de direcciones para evitar conflictos de IP. Si es posible, asigne la firstConsecutiveStaticIP propiedad a una dirección IP cerca del final del espacio de direcciones IP disponible en la subred.

Por ejemplo, para un clúster con tres nodos del plano de control. Si usa una subred con 256 direcciones, por ejemplo 10.100.0.0/24, tendrá que establecer su primera dirección IP estática consecutiva antes de 239. En la tabla siguiente se muestran las direcciones y consideraciones:

Intervalo para la subred /24 Number Nota:
172.100.0.0 - 172.100.0.3 4 Reservado en la subred de Azure.
172.100.0.224-172.100.0.238 14 Recuento de direcciones IP de un clúster definido por el motor de AKS.

3 direcciones IP para los 3 nodos del plano de control
10 direcciones IP para la capacidad de aumento
1 dirección IP para el equilibrador de carga
172.100.0.238 - 172.100.0.254 16 Búfer de 16 direcciones IP.
172.100.0.255 1 Reservado en la subred de Azure.

En este ejemplo, la propiedad firstConsecutiveStaticIP sería 172.100.0.224.

En el caso de subredes mayores, por ejemplo /16 (con más de 60 000 direcciones), es posible que no resulte práctico establecer las asignaciones de direcciones IP estáticas al final del espacio de red. Establezca el intervalo de direcciones IP estáticas del clúster fuera de las 24 primeras direcciones del espacio de IP, con el fin de que el clúster pueda ser resistente al reclamar direcciones.

Ejemplo de bloques de direcciones de Kubenet

En el ejemplo siguiente, puede ver cómo estas diversas consideraciones rellenan el espacio de direcciones de la red virtual de un clúster mediante el complemento de red kubenet con subredes dedicadas para los grupos de nodos del plano de control y del agente con tres nodos por grupo.

Espacio de direcciones de red virtual: 10.100.0.0/16.

Bloque de direcciones (subred) CIDR Intervalo de IP Recuento de IP (disponible)
Bloque de nodos del plano de control 10.100.0.0/24 10.100.0.0 - 10.100.0.255 255 - 4 reservados = 251
Bloques de nodos de agentes 10.100.1.0/24 10.100.1.0 - 10.100.1.255 255 - 4 reservados = 251
Bloque de servicios 10.100.16.0/20 10.100.16.0 - 10.100.31.255 4096 - 5 reservados = 4091
Bloque de clústeres 10.100.128.0/17 10.100.128.0 - 10.100.255.255 32 768 - 5 reservados = 32 763

En este ejemplo, la propiedad firstConsecutiveStaticIP sería 10.100.0.239.

Ejemplo de bloques de direcciones de Azure CNI

En el ejemplo siguiente, puede ver cómo estas diversas consideraciones rellenan el espacio de direcciones de la red virtual de un clúster mediante el complemento de red Azure CNI con subredes dedicadas para los grupos de nodos del plano de control y del agente con tres nodos por grupo.

Espacio de direcciones de red virtual: 172.24.0.0/16.

Nota

En su entorno, si el intervalo de IP pública está dentro de CIDR10.0.0.0/8, use kubenet como complemento de red.

Bloque de direcciones (subred) CIDR Intervalo de IP Recuento de IP (disponible)
Bloque de nodos del plano de control 172.24.0.0/24 172.24.0.0 - 172.24.0.255 255 - 4 reservados = 251
Nodos del agente & bloque de clúster 172.24.128.0/17 172.24.128.0 - 172.24.255.255 32 768 - 5 reservados = 32 763
Bloque de servicios 172.24.16.0/20 172.24.16.0 - 172.24.31.255 4096 - 5 reservados = 4091

En este ejemplo, la propiedad firstConsecutiveStaticIP sería 172.24.0.239.

Actualización del modelo de API

Actualice el modelo de API que se usa para implementar el clúster desde el motor de AKS en la red virtual personalizada.

En masterProfile, establezca los valores siguientes:

Campo Ejemplo Descripción
vnetSubnetId /subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn Especifique el identificador de la ruta de acceso de Azure Resource Manager de la subred. Este valor se asigna al bloque de direcciones de los nodos del plano de control anterior.
firstConsecutiveStaticIP 10.100.0.239 Asigne a la propiedad de configuración firstConsecutiveStaticIP una dirección IP que se encuentre cerca del firstConsecutiveStaticIP del espacio de direcciones IP disponible en la subred deseada. firstConsecutiveStaticIP solo se aplica al grupo de nodos del plano de control.

En agentPoolProfiles, establezca los valores siguientes:

Campo Ejemplo Descripción
vnetSubnetId /subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn Especifique el identificador de la ruta de acceso de Azure Resource Manager de la subred. Este valor se asigna al bloque de direcciones de los nodos de agentes anterior.

En orchestratorProfile, busque kubernetesConfig y establezca el siguiente valor:

Campo Ejemplo Descripción
clusterSubnet 10.100.128.0/17 Subred IP utilizada para asignar direcciones IP a las interfaces de red los pod. Este valor se asigna al bloque de direcciones de clúster anterior. La subred debe estar en el espacio de direcciones de la red virtual. Con Azure CNI habilitado, el valor predeterminado es 10.240.0.0/12. Sin Azure CNI, el valor predeterminado es 10.244.0.0/16. Use /16 en lugar de una subred /24. Si usa /24, esta subred se asignará a un solo nodo. Otros nodos no recibirán la red POD asignada, ya que se quedará sin espacio de direcciones IP, por lo que no estarán listos en el clúster.
serviceCidr 10.100.16.0/20 Subred IP que se utiliza para asignar las direcciones IP de los servicios implementados en el clúster. Este valor se asigna al bloque de servicios de clúster anterior.
dnsServiceIP 10.100.16.10 Dirección IP que se va a asignar al servicio DNS del clúster. La dirección debe procede de la subred serviceCidr. Este valor se debe establecer al especificar serviceCidr. El valor predeterminado es la dirección .10 de la subred serviceCidr.

Por ejemplo, si usa kubenet:
Con un espacio de direcciones de red de 10.100.0.0/16, donde la subred para control-plane-sn es 10.100.0.0/24 y agents-sn es 10.100.1.0/24

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "10.100.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/agents-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "10.100.128.0/17",
    "serviceCidr": "10.100.16.0/20",
    "dnsServiceIP" : "10.100.16.10",

    ...
  },

Por ejemplo, si utiliza Azure CNI:
Con un espacio de direcciones de red de 172.24.0.0/16, donde la subred para control-plane-sn es 172.24.0.0/24 y k8s-sn es 172.24.128.0/17

"masterProfile": {
  ...
  "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/control-plane-sn",
  "firstConsecutiveStaticIP": "172.24.0.239",
  ...
},
...
"agentPoolProfiles": [
  {
    ...
    "vnetSubnetId": "/subscriptions/77e28b6a-582f-42b0-94d2-93b9eca60845/resourceGroups/MDBN-K8S/providers/Microsoft.Network/virtualNetworks/MDBN-K8S/subnets/k8s-sn",
    ...
  },
    ...
"kubernetesConfig": [
  {
    ...
    "clusterSubnet": "172.24.128.0/17",
    "serviceCidr": "172.24.16.0/20",
    "dnsServiceIP" : "172.24.16.10",
    ...
  },

Implementación del clúster

Después de agregar los valores al modelo de API, puede implementar el clúster desde la máquina cliente mediante el comando en el deploy motor de AKS. Para ver las instrucciones, consulte la sección Implementación de un clúster de Kubernetes.

Establecimiento de la tabla de rutas

Si utiliza kubenet, por ejemplo, networkPlugin: kubeneten el objeto de configuración del modelo de API kubernetesConfig. Después de implementar el clúster, vuelva a la red virtual en el portal de usuario de Azure Stack. Establezca tanto la tabla de rutas como el grupo de seguridad de red en la hoja de la subred. Una vez que haya implementado correctamente un clúster en su red virtual personalizada, obtenga el identificador del recurso Tabla de rutas en la hoja Network (Red) del grupo de recursos del clúster.

  1. Abra el portal de usuarios en la instancia de Azure Stack Hub.

  2. Seleccione Todos los recursos.

  3. Escriba el nombre de la red virtual en el cuadro de búsqueda.

  4. Seleccione Subredes y, después, seleccione el nombre de la subred que contiene el clúster.

    Tabla de rutas y grupo de seguridad de red

  5. Seleccione Tabla de rutas y, después, seleccione la tabla de rutas del clúster.

  6. Asegúrese de que esto se realiza para cada subred especificada en el modelo de API, incluida la masterProfile subred.

Nota

La red virtual personalizada de un clúster Windows de Kubernetes tiene un problema conocido.

Pasos siguientes