注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
启用 GitHub 操作工作流以使用 OKE OpenID Connect 验证访问 Kubernetes 集群
简介
在本教程中,我们授权 GitHub 操作工作流在 Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 或 OKE)集群中执行 Kubernetes 命令。通过使用 GitHub 的原生 OpenID Connect (OIDC) 验证,您可以避免管理长期身份证明并简化对 OKE 集群的安全自动化访问,从而实现更高效的连续集成和连续部署 (Continuous Integration and Continuous Deployment,CI/CD) 工作流。
目标
- 启用 GitHub 操作工作流以使用 OKE OIDC 验证访问 Kubernetes 集群。
任务 1:创建 GitHub 资料档案库
在 GitHub 帐户中创建新系统信息库。输入您的帐户名称或组织名称以及资料档案库的名称。
任务 2:配置 OKE 群集
-
使用 OKE 创建 Kubernetes 集群,或选择现有集群以更新和记下集群 Oracle Cloud 标识符 (OCID)。有关更多信息,请参见 Creating Kubernetes Clusters Using Console Workflows 。
-
创建 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 角色的访问控制 (Role Based Access Control,RBAC)
使用以下 YAML 文件在 Kubernetes 集群中配置 RBAC 以授权 GitHub 操作工作流执行某些操作(get/watch/list pods 和 get/watch/list/create/update/delete deployment)。使用 GitHub 帐户名称和系统信息库名称更新以下行:"name: actions-oidc:repo:GH-ACCOUNT/REPO:ref:refs/heads/main"
。
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 操作工作流将自动运行。
kubectl
命令将返回您使用 RBAC 配置授权的操作(get/watch/list pods 和 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 帮助中心。
Enable a GitHub Actions Workflow to Access a Kubernetes Cluster using OKE OpenID Connect Authentication
G17275-01
October 2024