주:

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) 워크플로우를 구현할 수 있습니다.

목표

작업 1: GitHub 저장소 생성

GitHub 계정에 새 저장소를 생성합니다. 계정 이름 또는 조직 이름과 저장소 이름을 입력합니다.

작업 2: OKE 클러스터 구성

  1. OKE로 Kubernetes 클러스터를 생성하거나, 기존 클러스터를 선택하여 클러스터 OCID(Oracle Cloud Identifier)를 업데이트하고 메모합니다. 자세한 내용은 콘솔 워크플로우를 사용하여 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: 송신 네트워크 트래픽 구성

클러스터 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 작업 워크플로우를 생성합니다.

  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 작업 워크플로우가 자동으로 실행됩니다. kubectl 명령은 RBAC 구성으로 권한이 부여된 작업(get/watch/list pods 및 get/watch/list/create/update/delete deployments)을 반환합니다.

    GitHub 작업 워크플로우 실행

    그림 github-actions-workflow.png에 대한 설명

확인

추가 학습 자원

docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.