Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
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
- Active el flujo de trabajo Acciones de GitHub para acceder a un cluster de Kubernetes mediante la autenticación de OIDC de OKE.
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
-
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.
-
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
yREPO
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" ] } }
- isOpenIdConnectAuthEnabled: introduzca
-
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.
-
Haga clic en Acciones y en Configurar un flujo de trabajo usted mismo.
-
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).
Agradecimientos
-
Autor: Greg Verstraeten (director principal sénior de productos)
-
Colaborador - Gavin Scheele (miembro superior del personal técnico)
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.
Enable a GitHub Actions Workflow to Access a Kubernetes Cluster using OKE OpenID Connect Authentication
G17268-01
October 2024