Hinweis:

GitHub-Aktionsworkflow für den Zugriff auf ein Kubernetes-Cluster mit der OKE OpenID Connect-Authentifizierung aktivieren

Einführung

In diesem Tutorial autorisieren wir einen Workflow GitHub Actions, um einen Kubernetes-Befehl in einem Oracle Cloud Infrastructure Kubernetes Engine-(OCI Kubernetes Engine oder OKE-)Cluster auszuführen. Mit der nativen OpenID Connect-(OIDC-)Authentifizierung von GitHub können Sie die Verwaltung langlebiger Zugangsdaten vermeiden und den sicheren, automatisierten Zugriff auf Ihre OKE-Cluster optimieren, um effizientere Workflows für kontinuierliche Integration und kontinuierliches Deployment (CI/CD) zu ermöglichen.

Ziele

Aufgabe 1: GitHub-Repository erstellen

Erstellen Sie ein neues Repository in Ihrem GitHub-Account. Geben Sie Ihren Account- oder Organisationsnamen und den Namen des Repositorys ein.

Aufgabe 2: OKE-Cluster konfigurieren

  1. Erstellen Sie ein Kubernetes-Cluster mit OKE, oder wählen Sie ein vorhandenes Cluster aus, um die Oracle Cloud-ID (OCID) des Clusters zu aktualisieren und notieren. Weitere Informationen finden Sie unter Kubernetes-Cluster mit Konsolenworkflows erstellen.

  2. Erstellen Sie eine JSON-Datei, um das Cluster mit den folgenden Informationen zu aktualisieren.

    • isOpenIdConnectAuthEnabled: Geben Sie true ein.
    • issuerUrl: Geben Sie "https://token.actions.githubusercontent.com" ein.
    • clientId: Geben Sie den Wert ein. In diesem Beispiel verwenden wir "oke-kubernetes-cluster". Dieser Wert muss mit der Zielgruppe im Workflow für GitHub-Aktionen übereinstimmen.
    • requiredClaim: Geben Sie ["repository=GH_ACCOUNT/REPO", "workflow=NAME", "ref=refs/heads/main"] ein.
    • usernameClaim: Geben Sie "sub" ein.
    • usernamePrefix: Geben Sie "actions-oidc:" ein.

    Ersetzen Sie die Werte GH_ACCOUNT und REPO durch Ihre Werte. Die JSON-Datei sollte wie folgt aussehen:

    {
        "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. Führen Sie den Befehl "OCI-Befehlszeilenschnittstelle (CLI)" aus, um das Cluster mit Ihrer JSON-Datei zu aktualisieren. Ersetzen Sie CLUSTER_OCID durch Ihre Werte.

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

Aufgabe 3: Egress-Netzwerkverkehr konfigurieren

Ermöglichen Sie dem Cluster-API-Server den Egress-Traffic an GitHub, indem Sie der Subnetz-Sicherheitsliste Ihrer Sicherheitsregeln, die dem Cluster-Kubernetes-API-Endpunkt zugewiesen sind, eine Sicherheitsregel hinzufügen.

Aufgabe 4: Rollenbasierte Kubernetes-Zugriffskontrolle (Role Based Access Control, RBAC) konfigurieren

Konfigurieren Sie RBAC in Ihrem Kubernetes-Cluster, um den Workflow GitHub Actions für bestimmte Vorgänge (get/watch/list-Pods und get/watch/list/create/update/delete-Deployments) mit der folgenden YAML-Datei zu autorisieren. Aktualisieren Sie die folgende Zeile: "name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main" mit Ihrem GitHub-Accountnamen und Repository-Namen.

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

Aufgabe 5: GitHub-Aktionen konfigurieren

Erstellen Sie einen GitHub Actions-Workflow im GitHub-Repository.

  1. Klicken Sie auf Aktionen, und Erstellen Sie einen Workflow selbst.

  2. Fügen Sie den folgenden Code in den Editor ein, und aktualisieren Sie server="https://X.X.X.X:6443" mit der öffentlichen IP des Clusters.

    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
    

    Der Workflow "Github-Aktionen" wird automatisch ausgeführt. Der Befehl kubectl gibt die Vorgänge zurück, die Sie mit der RBAC-Konfiguration autorisiert haben (get/watch/list pods und get/watch/list/create/update/delete deployments).

    GitHub Aktionsworkflowausführung

    Beschreibung der Abbildung github-actions-workflow.png

Danksagungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.