附註:
- 此教學課程需要存取 Oracle Cloud。若要註冊免費帳戶,請參閱 Oracle Cloud Infrastructure Free Tier 入門。
- 它使用 Oracle Cloud Infrastructure 證明資料、租用戶及區間的範例值。完成實驗室時,請將這些值取代為您雲端環境特定的值。
啟用 GitHub 動作工作流程以使用 OKE OpenID Connect 認證存取 Kubernetes 叢集
簡介
在本教學課程中,我們授權 GitHub 動作工作流程在 Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes 引擎或 OKE) 叢集中執行 Kubernetes 命令。透過使用 GitHub 的原生 OpenID Connect (OIDC) 認證,您可以避免管理長期的證明資料,並簡化對 OKE 叢集的安全自動化存取,進而更有效率的持續整合和持續部署 (CI/CD) 工作流程。
目標
- 啟用 GitHub 動作工作流程,以使用 OKE OIDC 認證存取 Kubernetes 叢集。
工作 1:建立 GitHub 儲存區域
在您的 GitHub 帳戶中建立新的儲存區域。輸入您的帳戶名稱或組織名稱,以及儲存區域的名稱。
作業 2:設定 OKE 叢集
-
建立含有 OKE 的 Kubernetes 叢集,或選取現有叢集以更新並記下叢集 Oracle Cloud Identifier (OCID)。如需詳細資訊,請參閱使用主控台工作流程建立 Kubernetes 叢集。
-
建立 JSON 檔案以使用下列資訊更新叢集。
- isOpenIdConnectAuthEnabled:輸入
true
。 - issuerUrl:輸入
"https://token.actions.githubusercontent.com"
。 - clientId:輸入您的值。在此範例中,我們使用
"oke-kubernetes-cluster"
。此值必須符合您 GitHub 動作工作流程中的對象。 - requiredClaim:輸入
["repository=GH_ACCOUNT/REPO", "workflow=NAME", "ref=refs/heads/main"]
。 - usernameClaim:輸入
"sub"
。 - usernamePrefix:輸入
"actions-oidc:"
。
將
GH_ACCOUNT
和REPO
值取代為您的值。JSON 檔案應該如下所示:{ "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:輸入
-
執行 OCI 命令行介面 (CLI) 命令,以使用您的 JSON 檔案更新叢集。將
CLUSTER_OCID
取代為您的值。oci ce cluster update --cluster-id CLUSTER_OCID --from-json file://./update.json
作業 3:設定傳出網路流量
將安全規則新增至指定給叢集 Kubernetes API 端點的安全規則子網路安全清單,以允許叢集 API 伺服器將流量傳出至 GitHub。
作業 4:設定以 Kubernetes 角色為基礎的存取控制 (RBAC)
在您的 Kubernetes 叢集中設定 RBAC,以授權您的 GitHub 動作工作流程使用下列 YAML 檔案執行特定作業 (取得 / 監看 / 列出 Pod 和 get/watch/list/create/update/delete 部署)。更新下列行:"name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main"
,並使用您的 GitHub 帳戶名稱和儲存庫名稱。
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
工作 5:設定 GitHub 動作
在您的 GitHub 儲存區域中建立 GitHub 動作工作流程。
-
按一下動作,然後自行設定工作流程。
-
在編輯器中貼上下列程式碼,然後使用叢集的公用 IP 更新
server="https://X.X.X.X:6443"
。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
Github Actions 工作流程將會自動執行。
kubectl
命令將會傳回您使用 RBAC 組態 (取得 / 監看 / 列出 Pod 和 get/watch/list/create/update/delete 部署) 授權的作業。
認可
-
作者 - Greg Verstraeten (資深首席產品經理)
-
貢獻者 - Gavin Scheele (技術人員資深成員)
其他學習資源
探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Enable a GitHub Actions Workflow to Access a Kubernetes Cluster using OKE OpenID Connect Authentication
G17276-01
October 2024