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.
- Entidad de servicio de Azure: Cree una entidad de servicio y tome nota de los siguientes valores: appId, displayName, password y tenant.
instalar Ansible: realice una de las siguientes opciones:
- Instalación de y configurar Ansible en una máquina virtual Linux
- Configurar Azure Cloud Shell y, si no tiene acceso a una máquina virtual Linux, crear una máquina virtual con Ansible.
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
yclient_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
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
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óndebug
del manual, los resultados se muestran al finalizar el comando.
- Debido a la variable