附註:

啟用 GitHub 動作工作流程以使用 OKE OpenID Connect 認證存取 Kubernetes 叢集

簡介

在本教學課程中,我們授權 GitHub 動作工作流程在 Oracle Cloud Infrastructure Kubernetes Engine (OCI Kubernetes 引擎或 OKE) 叢集中執行 Kubernetes 命令。透過使用 GitHub 的原生 OpenID Connect (OIDC) 認證,您可以避免管理長期的證明資料,並簡化對 OKE 叢集的安全自動化存取,進而更有效率的持續整合和持續部署 (CI/CD) 工作流程。

目標

工作 1:建立 GitHub 儲存區域

在您的 GitHub 帳戶中建立新的儲存區域。輸入您的帳戶名稱或組織名稱,以及儲存區域的名稱。

作業 2:設定 OKE 叢集

  1. 建立含有 OKE 的 Kubernetes 叢集,或選取現有叢集以更新並記下叢集 Oracle Cloud Identifier (OCID)。如需詳細資訊,請參閱使用主控台工作流程建立 Kubernetes 叢集

  2. 建立 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_ACCOUNTREPO 值取代為您的值。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"
          ]
        }
    }
    
  3. 執行 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 動作工作流程。

  1. 按一下動作,然後自行設定工作流程

  2. 在編輯器中貼上下列程式碼,然後使用叢集的公用 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 部署) 授權的作業。

    GitHub 動作工作流程執行

    github-actions-workflow.png 圖解描述

認可

其他學習資源

探索 docs.oracle.com/learn 上的其他實驗室,或存取 Oracle Learning YouTube 頻道上的更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center