Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte nach Abschluss der Übung durch Werte, die für Ihre Cloud-Umgebung spezifisch sind.
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
- Aktivieren Sie den Workflow GitHub Actions, um mit der OKE-OIDC-Authentifizierung auf ein Kubernetes-Cluster zuzugreifen.
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
-
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.
-
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
undREPO
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" ] } }
- isOpenIdConnectAuthEnabled: Geben Sie
-
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.
-
Klicken Sie auf Aktionen, und Erstellen Sie einen Workflow selbst.
-
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).
Danksagungen
-
Autor - Greg Verstraeten (Senior Principal Product Manager)
-
Mitwirkender – Gavin Scheele (Seniores Mitglied des technischen Personals)
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.
Enable a GitHub Actions Workflow to Access a Kubernetes Cluster using OKE OpenID Connect Authentication
G17267-01
October 2024