Tutorial: Configuración de la red de Azure CNI en Azure Kubernetes Service (AKS) con AnsibleTutorial: Configure Azure CNI networking in Azure Kubernetes Service (AKS) using Ansible

Importante

Para ejecutar los cuadernos de estrategias de ejemplo de este tutorial, se requiere Ansible 2.8 (o cualquier versión posterior).Ansible 2.8 (or later) is required to run the sample playbooks in this article.

Azure Kubernetes Service (AKS) simplifica la implementación en Azure de clústeres de Kubernetes administrados.Azure Kubernetes Service (AKS) makes it simple to deploy a managed Kubernetes cluster in Azure. AKS reduce la complejidad y la sobrecarga operativa de la administración de Kubernetes al descargar gran parte de esa responsabilidad en Azure.AKS reduces the complexity and operational overhead of managing Kubernetes by offloading much of that responsibility to Azure. Como servicio hospedado de Kubernetes, Azure maneja tareas críticas como la supervisión del estado y el mantenimiento para usted.As a hosted Kubernetes service, Azure handles critical tasks like health monitoring and maintenance for you. Azure administra los maestros de Kubernetes.The Kubernetes masters are managed by Azure. Solo debe administrar y mantener los nodos de agente.You only manage and maintain the agent nodes. Como servicio de Kubernetes administrado, AKS es gratuito (solo debe pagar los nodos de agente incluidos en sus clústeres, no los maestros).As a managed Kubernetes service, AKS is free - you pay only for the agent nodes within your clusters; not for the masters.

Con AKS, puede implementar un clúster mediante los siguientes modelos de red:Using AKS, you can deploy a cluster using the following network models:

  • Redes kubenet: los recursos de red normalmente se crean y configuran cuando se implementa el clúster de AKS.Kubenet networking - Network resources are typically created and configured as the AKS cluster is deployed.
  • Red de Azure CNI: el clúster de AKS se conecta a los recursos y las configuraciones de la red virtual existente.Azure CNI networking - AKS cluster is connected to existing virtual network (VNET) resources and configurations.

Para más información sobre las conexiones de red a las aplicaciones de AKS, vea Conceptos de redes de aplicaciones en Azure Kubernetes Service (AKS).For more information about networking to your applications in AKS, see Network concepts for applications in AKS.

En este tutorial, se usa Ansible para:In this tutorial, Ansible is used to:

  • Creación de un clúster de AKSCreate an AKS cluster
  • Configuración de redes de Azure CNIConfigure Azure CNI networking

Requisitos previosPrerequisites

  • Suscripción de Azure: Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.Azure subscription: If you don't have an Azure subscription, create a free account before you begin.
  • Entidad de servicio de Azure: Cree una entidad de servicio, tomando nota de los siguientes valores: appId, displayName, password y tenant.Azure service principal: Create a service principal, making note of the following values: appId, displayName, password, and tenant.

Creación de una red virtual y una subredCreate a virtual network and subnet

El código del cuaderno de estrategias de ejemplo de esta sección se utiliza para:The sample playbook code in this section is used to:

  • Creación de una red virtualCreate a virtual network
  • Crear una subred dentro de la red virtualCreate a subnet within the virtual network

Guarde el siguiente cuaderno de estrategias como vnet.yml:Save the following playbook as 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 virtualCreate an AKS cluster in the virtual network

El código del cuaderno de estrategias de ejemplo de esta sección se utiliza para:The sample playbook code in this section is used to:

  • Crear un clúster de AKS en una red virtualCreate an AKS cluster within a virtual network.

Guarde el siguiente cuaderno de estrategias como aks.yml:Save the following playbook as 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 claves que se deben tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:Here are some key notes to consider when working with the sample playbook:

  • Use el módulo azure_rm_aks_version para buscar la versión compatible.Use the azure_rm_aks_version module to find the supported version.

  • vnet_subnet_id es la subred que creó en la sección anterior.The vnet_subnet_id is the subnet created in the previous section.

  • El cuaderno de estrategias carga ssh_key desde ~/.ssh/id_rsa.pub.The playbook loads ssh_key from ~/.ssh/id_rsa.pub. Si lo modifica, utilice el formato de línea única, empezando por "ssh-rsa" (sin las comillas).If you modify it, use the single-line format - starting with "ssh-rsa" (without the quotes).

  • Los valores client_id y client_secret se cargan desde ~/.azure/credentials, que es el archivo de credenciales predeterminado.The client_id and client_secret values are loaded from ~/.azure/credentials, which is the default credential file. Puede establecer estos valores en su entidad de servicio o cargarlos desde las variables de entorno:You can set these values to your service principal or load these values from environment variables:

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

Ejecución del cuaderno de estrategias de ejemploRun the sample playbook

El código del cuaderno de estrategias de ejemplo de esta sección se usa para probar varias características que se muestran a lo largo de este tutorial.The sample playbook code in this section is used to test various features shown throughout this tutorial.

Guarde el siguiente cuaderno de estrategias como aks-azure-cni.yml:Save the following playbook as 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 claves que se deben tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:Here are some key notes to consider when working with the sample playbook:

  • Cambie el valor aksansibletest por el nombre del grupo de recursos.Change the aksansibletest value to your resource group name.
  • Cambie el valor aksansibletest por el nombre de AKS.Change the aksansibletest value to your AKS name.
  • Cambie el valor eastus por la ubicación del grupo de recursos.Change the eastus value to your resource group location.

Para ejecutar el cuaderno de estrategias, use el comando ansible-playbook:Run the playbook using the ansible-playbook command:

ansible-playbook aks-azure-cni.yml

Tras ejecutar el cuaderno de estrategias, debería ver resultados similares a los siguientes:After running the playbook, you see output similar to the following results:

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 recursosClean up resources

Cuando ya no los necesite, elimine los recursos creados en este artículo.When no longer needed, delete the resources created in this article.

El código del cuaderno de estrategias de ejemplo de esta sección se utiliza para:The sample playbook code in this section is used to:

  • Eliminar un grupo de recursos al que se hace referencia en la sección vars.Delete a resource group referred to in the vars section.

Guarde el siguiente cuaderno de estrategias como cleanup.yml:Save the following playbook as cleanup.yml:

---
- hosts: localhost
  vars:
      resource_group: {{ resource_group_name }}
  tasks:
      - name: Clean up resource group
        azure_rm_resourcegroup:
            name: "{{ resource_group }}"
            state: absent
            force: yes

Estas son algunas notas claves que se deben tener en cuenta al trabajar con el cuaderno de estrategias de ejemplo:Here are some key notes to consider when working with the sample playbook:

  • Reemplace el marcador de posición {{ resource_group_name }} por el nombre del grupo de recursos.Replace the {{ resource_group_name }} placeholder with the name of your resource group.
  • Se eliminarán todos los recursos del grupo de recursos especificado.All resources within the specified resource group will be deleted.

Para ejecutar el cuaderno de estrategias, use el comando ansible-playbook:Run the playbook using the ansible-playbook command:

ansible-playbook cleanup.yml

Pasos siguientesNext steps