Note:

Activación de un flujo de trabajo de acciones GitHub para acceder a un cluster de Kubernetes mediante la autenticación de Connect de OKE OpenID

Introducción

En este tutorial, autorizamos a un flujo de trabajo de acciones GitHub a ejecutar un comando de Kubernetes en un cluster de Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes Engine u OKE). Al utilizar la autenticación OpenID Connect (OIDC) nativa de GitHub, puede evitar la gestión de credenciales de larga duración y simplificar el acceso seguro y automatizado a los clusters de OKE, lo que permite flujos de trabajo de integración y despliegue continuos (CI/CD) más eficientes.

Objetivos

Tarea 1: Creación de un repositorio GitHub

Cree un nuevo repositorio en su cuenta GitHub. Introduzca el nombre de cuenta u organización y el nombre del repositorio.

Tarea 2: Configuración de un cluster de OKE

  1. Cree un cluster de Kubernetes con OKE o seleccione un cluster existente para actualizar y anotar el identificador de Oracle Cloud (OCID) del cluster. Para obtener más información, consulte Creación de clusters de Kubernetes con flujos de trabajo de la consola.

  2. Cree un archivo JSON para actualizar el cluster con la siguiente información.

    • isOpenIdConnectAuthEnabled: introduzca true.
    • issuerUrl: introduzca "https://token.actions.githubusercontent.com".
    • clientId: introduzca su valor. En este ejemplo, utilizamos "oke-kubernetes-cluster". Este valor debe coincidir con el público en el flujo de trabajo Acciones de GitHub.
    • requiredClaim: introduzca ["repository=GH_ACCOUNT/REPO", "workflow=NAME", "ref=refs/heads/main"].
    • usernameClaim: introduzca "sub".
    • usernamePrefix: introduzca "actions-oidc:".

    Sustituya los valores GH_ACCOUNT y REPO por los valores. El aspecto del archivo JSON debe ser el siguiente:

    {
        "openIdConnectTokenAuthenticationConfig": {
          "isOpenIdConnectAuthEnabled": true,
          "clientId": "oke-kubernetes-cluster",
          "issuerUrl": "https://token.actions.githubusercontent.com",
          "usernameClaim": "sub",
          "usernamePrefix": "actions-oidc:",
          "requiredClaim": [
            "repository=gregvers/testoidc",
            "workflow=oke-oidc",
            "ref=refs/heads/main"
          ],
          "caCertificate": null,
          "signingAlgorithms": [
            "RS256"
          ]
        }
    }
    
  3. Ejecute el comando de la interfaz de línea de comandos (CLI) de OCI para actualizar el cluster con su archivo JSON. Sustituya CLUSTER_OCID por sus valores.

    oci ce cluster update --cluster-id CLUSTER_OCID --from-json file://./update.json
    

Tarea 3: Configuración del tráfico de red de salida

Permita que el servidor de API de cluster salga del tráfico a GitHub agregando una regla de seguridad a la lista de seguridad de subred de las reglas de seguridad asignadas al punto final de API de Kubernetes de cluster.

Tarea 4: Configuración del control de acceso basado en roles (RBAC) de Kubernetes

Configure RBAC en el cluster de Kubernetes para autorizar al flujo de trabajo de GitHub Actions a realizar determinadas operaciones (obtener/ver/lista de pods y obtener/ver/lista/crear/actualizar/suprimir despliegues) mediante el siguiente archivo YAML. Actualice la siguiente línea: "name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main" con el nombre de la cuenta GitHub y el nombre del repositorio.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: actions-oidc-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "watch", "list"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "watch", "list", "create", "update", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: actions-oidc-binding
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: actions-oidc-role
subjects:
  - apiGroup: rbac.authorization.k8s.io
    kind: User
    name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main

Tarea 5: Configuración de acciones de GitHub

Cree un flujo de trabajo de acciones GitHub en el repositorio GitHub.

  1. Haga clic en Acciones y en Configurar un flujo de trabajo usted mismo.

  2. Pegue el siguiente código en el editor y actualice server="https://X.X.X.X:6443" con la IP pública del cluster.

    name: OKE-OIDC
    
    on:
      # Triggers the workflow on push or pull request events but only for the "main" branch
      push:
        branches: [ "main" ]
      pull_request:
        branches: [ "main" ]
    
      # Allows you to run this workflow manually from the Actions tab
      workflow_dispatch:
    
    permissions:
      id-token: write # Required to receive OIDC tokens
    
    # This workflow generates a GitHub Actions OIDC token and runs kubectl command in an OKE cluster
    jobs:
      oke-oidc:
        runs-on: ubuntu-latest
        steps:
          - name: Create OIDC Token
            id: create-oidc-token
            run: |
              AUDIENCE="oke-kubernetes-cluster"
              OIDC_URL_WITH_AUDIENCE="$ACTIONS_ID_TOKEN_REQUEST_URL&audience=$AUDIENCE"
              IDTOKEN=$(curl \
                -H "Authorization: Bearer $ACTIONS_ID_TOKEN_REQUEST_TOKEN" \
                -H "Accept: application/json; api-version=2.0" \
                "$OIDC_URL_WITH_AUDIENCE" | jq -r .value)
              echo "::add-mask::${IDTOKEN}"
              echo "idToken=${IDTOKEN}" >> $GITHUB_OUTPUT
    
          - name: Check Permissions in Kubernetes
            run: |
              kubectl \
              --token=$ \
              --server="https://X.X.X.X:6443" \
              --insecure-skip-tls-verify \
              auth can-i --list
    

    El flujo de trabajo de Github Actions se ejecutará automáticamente. El comando kubectl devolverá las operaciones autorizadas con la configuración de RBAC (get/watch/list pods y get/watch/list/create/update/delete deployments).

    GitHub Ejecución de flujo de trabajo de acción

    Descripción de la ilustración github-actions-workflow.png

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.