주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
OKE OpenID Connect 인증을 사용하여 Kubernetes 클러스터에 액세스하기 위한 GitHub 작업 워크플로우 사용
소개
이 사용지침서에서는 Oracle Cloud Infrastructure Kubernetes Engine(OCI Kubernetes Engine 또는 OKE) 클러스터에서 Kubernetes 명령을 실행하도록 GitHub 작업 워크플로우에 권한을 부여합니다. GitHub의 네이티브 OIDC(OpenID Connect) 인증을 사용하면 수명이 긴 자격 증명을 관리하지 않고 OKE 클러스터에 대한 안전하고 자동화된 액세스를 간소화하여 보다 효율적인 CI/CD(Continuous Integration and Continuous Deployment) 워크플로우를 구현할 수 있습니다.
목표
- OKE OIDC 인증을 사용하여 Kubernetes 클러스터에 액세스하려면 GitHub 작업 워크플로우를 사용으로 설정합니다.
작업 1: GitHub 저장소 생성
GitHub 계정에 새 저장소를 생성합니다. 계정 이름 또는 조직 이름과 저장소 이름을 입력합니다.
작업 2: OKE 클러스터 구성
-
OKE로 Kubernetes 클러스터를 생성하거나, 기존 클러스터를 선택하여 클러스터 OCID(Oracle Cloud Identifier)를 업데이트하고 메모합니다. 자세한 내용은 콘솔 워크플로우를 사용하여 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: 송신 네트워크 트래픽 구성
클러스터 API 서버가 클러스터 Kubernetes API 끝점에 지정된 보안 규칙의 서브넷 보안 목록에 보안 규칙을 추가하여 GitHub로 트래픽을 송신하도록 허용합니다.
작업 4: Kubernetes RBAC(역할 기반 액세스 제어) 구성
다음 YAML 파일을 사용하여 Kubernetes 클러스터에서 RBAC를 구성하여 GitHub 작업 워크플로우가 특정 작업(POD 가져오기/감시/목록과 배치 가져오기/감시/목록/생성/업데이트/삭제)을 수행하도록 권한을 부여합니다. "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 작업 워크플로우가 자동으로 실행됩니다.
kubectl
명령은 RBAC 구성으로 권한이 부여된 작업(get/watch/list pods 및 get/watch/list/create/update/delete deployments)을 반환합니다.
확인
-
작성자 - Greg Verstraeten(Senior Principal Product Manager)
-
제공자 - Gavin Scheele(기술 직원 수석 멤버)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Enable a GitHub Actions Workflow to Access a Kubernetes Cluster using OKE OpenID Connect Authentication
G17273-01
October 2024