Compartir a través de


Tutorial: Configuración de redes de Azure CNI en Azure Kubernetes Service (AKS) mediante Ansible

Importante

Se requiere Ansible 2.8 (o posterior) para ejecutar los cuadernos de estrategias de ejemplo de este artículo.

azure Kubernetes Service (AKS) facilita la implementación de un clúster de Kubernetes administrado en Azure. AKS reduce la complejidad y la sobrecarga operativa de la administración de Kubernetes descargando gran parte de esa responsabilidad en Azure. Como servicio de Kubernetes hospedado, Azure controla tareas críticas, como la supervisión de estado y el mantenimiento. Azure administra los maestros de Kubernetes. Usted solo administra y mantiene los nodos del agente. Como servicio de Kubernetes administrado, AKS es gratuito; solo paga por los nodos del agente dentro de los clústeres, no por los nodos maestros.

Con AKS, puede implementar un clúster mediante los siguientes modelos de red:

  • Red de Azure CNI: el clúster AKS se conecta a los recursos y configuraciones de la red virtual existente.

Para obtener más información sobre cómo conectar sus aplicaciones en AKS, consulte Conceptos de red para aplicaciones en AKS.

En este artículo, aprenderá a:

  • Creación de un clúster de AKS
  • Configuración de redes de Azure CNI

Prerrequisitos

  • Suscripción de Azure: si no tiene una suscripción de Azure, cree una cuenta gratuita antes de empezar.

Creación de una red virtual y una subred

El código del cuaderno de estrategias de ejemplo de esta sección se usa para:

  • Creación de una red virtual
  • Creación de una subred dentro de la red virtual

Guarde el siguiente cuaderno de estrategias como vnet.yml:

- name: Create vnet
  azure_rm_virtualnetwork:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      address_prefixes_cidr:
          - 10.0.0.0/8

- name: Create subnet
  azure_rm_subnet:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      address_prefix_cidr: 10.240.0.0/16
      virtual_network_name: "{{ name }}"
  register: subnet

Creación de un clúster de AKS en la red virtual

El código del cuaderno de estrategias de ejemplo de esta sección se usa para:

  • Cree un clúster de AKS dentro de una red virtual.

Guarde el siguiente cuaderno de estrategias como aks.yml:

- name: List supported kubernetes version from Azure
  azure_rm_aks_version:
      location: "{{ location }}"
  register: versions

- name: Create AKS cluster within a VNet
  azure_rm_aks:
      resource_group: "{{ resource_group }}"
      name: "{{ name }}"
      dns_prefix: "{{ name }}"
      kubernetes_version: "{{ versions.azure_aks_versions[-1] }}"
      agent_pool_profiles:
        - count: 3
          name: nodepool1
          vm_size: Standard_D2_v2
          vnet_subnet_id: "{{ vnet_subnet_id }}"
      linux_profile:
          admin_username: azureuser
          ssh_key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
      service_principal:
          client_id: "{{ lookup('ini', 'client_id section=default file=~/.azure/credentials') }}"
          client_secret: "{{ lookup('ini', 'secret section=default file=~/.azure/credentials') }}"
      network_profile:
          network_plugin: azure
          docker_bridge_cidr: 172.17.0.1/16
          dns_service_ip: 10.2.0.10
          service_cidr: 10.2.0.0/24
  register: aks

Estas son algunas notas clave que se deben tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:

  • Use el módulo azure_rm_aks_version para buscar la versión admitida.

  • El vnet_subnet_id es la subred creada en la sección anterior.

  • El cuaderno de estrategias carga ssh_key desde ~/.ssh/id_rsa.pub. Si lo modifica, use el formato de una sola línea: a partir de "ssh-rsa" (sin las comillas).

  • Los valores client_id y client_secret se cargan desde ~/.azure/credentials, que es el archivo de credenciales predeterminado. Puede establecer estos valores en su principal de servicio o cargar estos valores desde variables de entorno.

    client_id: "{{ lookup('env', 'AZURE_CLIENT_ID') }}"
    client_secret: "{{ lookup('env', 'AZURE_SECRET') }}"
    

Ejecución del cuaderno de estrategias de ejemplo

El código del cuaderno de estrategias de ejemplo de esta sección se usa para probar varias características que se muestran en este tutorial.

Guarde el siguiente cuaderno de estrategias como aks-azure-cni.yml:

---
- hosts: localhost
  vars:
      resource_group: aksansibletest
      name: aksansibletest
      location: eastus
  tasks:
     - name: Ensure resource group exists
       azure_rm_resourcegroup:
           name: "{{ resource_group }}"
           location: "{{ location }}"

     - name: Create vnet
       include_tasks: vnet.yml

     - name: Create AKS
       vars:
           vnet_subnet_id: "{{ subnet.state.id }}"
       include_tasks: aks.yml

     - name: Show AKS cluster detail
       debug:
           var: aks

Estas son algunas notas clave que se deben tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:

  • Cambie el valor aksansibletest por el nombre del grupo de recursos.
  • Cambie el valor aksansibletest por el nombre de AKS.
  • Cambie el valor eastus por la ubicación del grupo de recursos.

Ejecute el cuaderno de estrategias mediante el comando ansible-playbook:

ansible-playbook aks-azure-cni.yml

Después de ejecutar el playbook, verá un resultado similar al siguiente:

PLAY [localhost] 

TASK [Gathering Facts] 
ok: [localhost]

TASK [Ensure resource group exists] 
changed: [localhost]

TASK [Create vnet] 
included: /home/devops/aks-cni/vnet.yml for localhost

TASK [Create vnet] 
changed: [localhost]

TASK [Create subnet] 
changed: [localhost]

TASK [Create AKS] 
included: /home/devops/aks-cni/aks.yml for localhost

TASK [List supported kubernetes version from Azure] 
 [WARNING]: Azure API profile latest does not define an entry for
ContainerServiceClient

ok: [localhost]

TASK [Create AKS cluster with vnet] 
changed: [localhost]

TASK [Show AKS cluster detail] 
ok: [localhost] => {
    "aks": {
        "aad_profile": {},
        "addon": {},
        "agent_pool_profiles": [
            {
                "count": 3,
                "name": "nodepool1",
                "os_disk_size_gb": 100,
                "os_type": "Linux",
                "storage_profile": "ManagedDisks",
                "vm_size": "Standard_D2_v2",
                "vnet_subnet_id": "/subscriptions/BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB/resourceGroups/aksansibletest/providers/Microsoft.Network/virtualNetworks/aksansibletest/subnets/aksansibletest"
            }
        ],
        "changed": true,
        "dns_prefix": "aksansibletest",
        "enable_rbac": false,
        "failed": false,
        "fqdn": "aksansibletest-0272707d.hcp.eastus.azmk8s.io",
        "id": "/subscriptions/BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB/resourcegroups/aksansibletest/providers/Microsoft.ContainerService/managedClusters/aksansibletest",
        "kube_config": "..."
        },
        "location": "eastus",
        "name": "aksansibletest",
        "network_profile": {
            "dns_service_ip": "10.2.0.10",
            "docker_bridge_cidr": "172.17.0.1/16",
            "network_plugin": "azure",
            "network_policy": null,
            "pod_cidr": null,
            "service_cidr": "10.2.0.0/24"
        },
        "node_resource_group": "MC_aksansibletest_aksansibletest_eastus",
        "provisioning_state": "Succeeded",
        "service_principal_profile": {
            "client_id": "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
        },
        "tags": null,
        "type": "Microsoft.ContainerService/ManagedClusters",
        "warnings": [
            "Azure API profile latest does not define an entry for ContainerServiceClient",
            "Azure API profile latest does not define an entry for ContainerServiceClient"
        ]
    }
}

PLAY RECAP 
localhost                  : ok=9    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Limpieza de recursos

  1. Guarde el código siguiente como delete_rg.yml.

    ---
    - hosts: localhost
      tasks:
        - name: Deleting resource group - "{{ name }}"
          azure_rm_resourcegroup:
            name: "{{ name }}"
            state: absent
          register: rg
        - debug:
            var: rg
    
  2. Ejecute el cuaderno de estrategias mediante el comando ansible-playbook. Reemplace el marcador de posición por el nombre del grupo de recursos que se va a eliminar. Se eliminarán todos los recursos del grupo de recursos.

    ansible-playbook delete_rg.yml --extra-vars "name=<resource_group>"
    

    puntos clave:

    • Debido a la variable register y a la sección debug del manual, los resultados se muestran al finalizar el comando.

Pasos siguientes