2.7 Distribución de Identity Console en Azure Kubernetes Service

Azure Kubernetes Service (AKS) es un servicio administrado de Kubernetes que le permite distribuir y gestionar clústeres. En esta sección se incluyen los procedimientos siguientes:

2.7.1 Distribución de Identity Console en un clúster de AKS

En esta sección, se describen los siguientes procedimientos para distribuir Identity Console en un clúster de AKS:

Creación de un registro de contenedor de Azure (ACR)

Un registro de contenedor de Azure (ACR) es un registro privado basado en Azure para las imágenes del contenedor de Docker.

Para obtener más información, consulte Create an Azure container registry using the Azure portal (Crear un registro de contenedor de Azure mediante el portal de Azure) en la sección "Create container registry - Portal" (Crear registro de contenedor - Portal) o realice los siguientes pasos para crear un registro de contenedor de Azure (ACR):

  1. Inicie sesión en el portal de Azure.

  2. Vaya a Crear un recurso > Contenedores > Registro de contenedor.

  3. En la pestaña Básico, especifique los valores de Grupo de recursos y Nombre del registro. El nombre del registro debe ser exclusivo en Azure y contener un mínimo de 5 caracteres alfanuméricos y un máximo de 50.

    Acepte los valores por defecto para los ajustes restantes.

  4. Haga clic en Revisar y crear.

  5. Haga clic en Crear.

  6. Entre en la CLI de Azure y ejecute el comando siguiente para entrar en el registro de contenedor de Azure.

    az acr login --name registryname

    Por ejemplo:

    az acr login --name < idconsole >
  7. Recupere el servidor de entrada a la sesión del registro de contenedor de Azure mediante el siguiente comando:

    az acr show --name registryname --query loginServer --output table

    Por ejemplo:

    az acr show --name < idconsole > --query loginServer --output table
  8. Etiquete la imagen local de Identity Console con el nombre del servidor de entrada a la sesión de ACR (registryname.azureacr.io) mediante el siguiente comando:

    docker tag idconsole-image <login server>/idconsole-image

    Por ejemplo:

    docker tag identityconsole:<version> registryname.azurecr.io/identityconsole:<version>
  9. Envíe la imagen etiquetada al registro.

    docker push <login server>/idconsole: <version>

    Por ejemplo:

    docker push registryname.azurecr.io/identityconsole:<version>
  10. Recupere la lista de imágenes del registro mediante el siguiente comando:

    az acr show --name registryname --query loginServer --output table

Configuración de un clúster de Kubernetes

Cree un recurso de servicio de Kubernetes mediante el portal o la CLI de Azure.

Para obtener pasos más detallados para la creación de un recurso de servicio de Kubernetes en Azure con un nodo, consulte Create an AKS Cluster (Crear un clúster de AKS) en Azure Quickstart.

NOTA:

  • Asegúrese de seleccionar Azure CNI como red.

  • Seleccione la red virtual existente (en la que se ha distribuido el servidor de eDirectory en la subred).

  • Seleccione el registro de contenedor existente en el que está disponible la imagen de Identity Console.

Creación de una dirección IP pública de SKU estándar

Un recurso de dirección IP pública en el grupo de recursos del clúster de Kubernetes actúa como IP del equilibrador de carga para la aplicación.

Para ver los pasos detallados, consulte la sección Create a public IP address using the Azure portal (Crear una dirección IP pública mediante el portal de Azure) en "Create public IP address – Portal" (Crear dirección IP pública - Portal).

Configuración de Cloud Shell y conexión al clúster de Kubernetes

Utilice Cloud Shell, disponible en el portal de Azure, para todas las operaciones.

Para iniciar Cloud Shell en el portal de Azure, consulte Start Cloud Shell (Iniciar Cloud Shell) en Bash – Quickstart o lleve a cabo los siguientes pasos para configurar Cloud Shell y conectarse al clúster de Kubernetes:

  1. En el portal de Azure, haga clic en el botón para abrir Cloud Shell.

    NOTA:Para gestionar un clúster de Kubernetes, utilice el cliente de línea de comandos de Kubernetes, kubectl. Si se utiliza Azure Cloud Shell, kubectl ya estará instalado.

  2. Configure kubectl para conectarse al clúster de Kubernetes mediante el siguiente comando:

    az aks get-credentials --resource-group "resource group name" --name "Kubernetes cluster name"

    Por ejemplo:

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
  3. Compruebe la lista de nodos del clúster mediante el siguiente comando:

    kubectl get nodes

Distribución de la aplicación

Para distribuir Identity Console, puede utilizar los archivos de ejemplo idc-services.yaml, idc-statefulset.yaml, idc-storageclass.yaml y idc-pvc.yaml.

También puede crear sus propios archivos yaml según sea necesario.

  1. Cree un recurso de clase de almacenamiento mediante el comando siguiente:

    kubectl apply -f <location of the YAML file>

    Por ejemplo:

    kubectl apply -f idc-storageclass.yaml

    (Opcional) Para obtener más información sobre cómo crear y utilizar dinámicamente un volumen persistente con un recurso compartido de archivos de Azure, consulte Dynamically create and use a persistent volume with Azure Files in Azure Kubernetes Service (AKS) (Crear y utilizar dinámicamente un volumen persistente con archivos de Azure en Azure Kubernetes Service).

    A continuación, se muestra un archivo de recursos de clase de almacenamiento de ejemplo:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: azurefilesc
    provisioner: kubernetes.io/azure-file
    mountOptions:
      - dir_mode=0777
      - file_mode=0777
      - uid=0
      - gid=0
      - mfsymlinks
      - cache=strict
      - actimeo=30
    parameters:
      skuName: Standard_LRS
      shareName: fileshare
    ~

    Un recurso de clase de almacenamiento permite el aprovisionamiento dinámico de almacenamiento. Se utiliza para definir cómo se crea un recurso compartido de archivo de Azure.

  2. Consulte la información de la clase de almacenamiento mediante el comando siguiente:

    kubectl get sc
  3. Cree un recurso de PVC mediante el archivo idc-pvc.yaml:

    kubectl apply -f <location of the YAML file>

    Por ejemplo:

    kubectl apply -f idc.pvc.yaml

    A continuación, se muestra un archivo de recursos de PVC de ejemplo:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvcforsc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefilesc
      resources:
        requests:
          storage: 5Gi

    Un recurso de reclamación de volumen persistente crea el recurso compartido de archivo. Una reclamación de volumen persistente (PVC) utiliza el objeto de clase de almacenamiento para aprovisionar dinámicamente un recurso compartido de archivo de Azure.

  4. Cargue el archivo edirapi.conf, el certificado de CA y el certificado del servidor en Cloud Shell.

    Haga clic en el icono del botón para cargar/descargar archivos en Cloud Shell y cargue los archivos edirapi.conf, SSCert.pem y keys.pfx.

    NOTA:edirapi.conf presenta un parámetro "origin" (origen). Aquí es necesario proporcionar la dirección IP con la que se accederá a la aplicación de Identity Console. (Utilice la dirección IP creada en la sección Creación de una dirección IP pública de SKU estándar).

    La distribución de Identity Console requiere el certificado de servidor (keys.pfx).

    Al crear el certificado de servidor, asegúrese de proporcionar un nombre DNS válido en el nombre alternativo del sujeto.

    Pasos para crear un nombre DNS válido:

    Un pod típico distribuido mediante StatefulSet presenta un nombre DNS como el siguiente: {statefulsetname}-{ordinal}.{servicename}.{namespace}.svc.cluster.local

    • Si el nombre de StatefulSet del archivo "idconsole-statefulset.yaml" es "idconsole-app", "statefulsetname" es igual a "idconsole-app".

    • Si es el primer pod, "ordinal" es igual a 0.

    • Si se define serviceName en el archivo "idconsole -statefulset.yaml" como "idconsole", serviceName es igual a "idconsole".

    • Si es el espacio de nombres por defecto, "namespace" es igual a "default".

    Salida: idconsole-app-0.idcosole.default.svc.cluster.local

  5. Cree un recurso configmap en el clúster de Kubernetes que almacenará los archivos de configuración junto con los certificados.

    Antes de ejecutar el comando, asegúrese de que los archivos (edirapi.conf, SSCert.pem y keys.pfx) estén presentes en el directorio.

    kubectl create configmap <confgimapName> --from-file= "path where the files are present"

    Por ejemplo:

    kubectl create configmap config-data --from-file=/data
  6. Vea los detalles del objeto configmap mediante el comando kuitemtl describe:

    kubectl describe configmap <configmapName>

    Por ejemplo:

    kubectl describe configmap confg-data
  7. Cree un recurso StatefulSet para distribuir el contenedor.

    Ejecute el siguiente comando para distribuir el contenedor:

    kubectl apply -f <location of the YAML file>

    Por ejemplo:

    kubectl apply -f idc-statefulset.yaml

    A continuación, se muestra un archivo de recursos StatefulSet de ejemplo:

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: idconsole-app
    spec:
      serviceName: idconsole
      selector:
        matchLabels:
          app: idconsole
      replicas: 1
      template:
        metadata:
          labels:
            app: idconsole
        spec:
          containers:
          - name: idconsole-container
            image: registryname.azurecr.io/identityconsole:<version>
            env:
            - name: ACCEPT_EULA
              value: "Y"
            ports:
            - containerPort: 9000
            volumeMounts:
              - name: configfiles
                mountPath: /config/data
              - name: datapersistenceandlog
                mountPath: /config
                subPath: log
          volumes:
            - name: configfiles
              configMap:
                name: config-data
            - name: datapersistenceandlog
              persistentVolumeClaim:
                claimName: pvcforsc
  8. Ejecute el siguiente comando para verificar el estado del pod distribuido:

    kubectl get pods -o wide
  9. Cree un recurso de servicio de tipo loadBalancer.

    El tipo de servicio especificado en el archivo yaml es loadBalancer.

    Cree un recurso de servicio mediante el siguiente comando:

    kubectl apply -f <location of the YAML file>

    Por ejemplo:

    kubectl apply -f ids-service.yaml

    A continuación, se muestra un archivo de recursos de servicio de ejemplo:

    apiVersion: v1
    kind: Service
    metadata:
      name: idconsole-service
      labels:
        run: idconsole-service
    spec:
      type: LoadBalancer
      loadBalancerIP: xx.xx.xx.xx
      selector:
        app: idconsole
      ports:
       - port: 9000
         targetPort: 9000
         protocol: TCP

    Compruebe la dirección EXTERNAL-IP (o loadBalancerIP) mediante el siguiente comando:

    kubectl get svc -o wide
  10. Inicie la dirección URL mediante EXTERNAL-IP (o la dirección de loadBalancerIP).

    Por ejemplo:

    https://<EXTERNAL-IP>:9000/identityconsole