Skip to main content

GitHub API์— ARC ์ธ์ฆ

Actions Runner Controller๋ฅผ GitHub API์— ์ธ์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

GitHub App์„(๋ฅผ) ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ personal access token (classic)์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ GitHub API์— ๋Œ€ํ•œ Actions Runner Controller(ARC)์„(๋ฅผ) ์ธ์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ  ํ•ญ๋ชฉ

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์ˆ˜์ค€์˜ ์‹คํ–‰๊ธฐ์šฉ GitHub App์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ํ˜ธ์ŠคํŠธํ˜• ์‹คํ–‰๊ธฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

GitHub App(์œผ)๋กœ ARC ์ธ์ฆ

  1. ์กฐ์ง์ด ์†Œ์œ ํ•œ GitHub App ๋งŒ๋“ค๊ธฐ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GitHub ์•ฑ ๋“ฑ๋ก์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”. ๋‹ค์Œ๊ณผ ๊ฐ™์ด GitHub App์„(๋ฅผ) ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    1. "ํ™ˆํŽ˜์ด์ง€ URL"์— https://github.com/actions/actions-runner-controller๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

    2. "์‚ฌ์šฉ ๊ถŒํ•œ"์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ถŒํ•œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

      • ๊ด€๋ฆฌ: ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ

        ์ฐธ๊ณ  ํ•ญ๋ชฉ

        Administration: Read and write๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฒ”์œ„์—์„œ ๋“ฑ๋กํ•  Actions Runner Controller๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์กฐ์ง ๋ฒ”์œ„์— ๋“ฑ๋กํ•  ๋•Œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

      • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ: ์ฝ๊ธฐ ์ „์šฉ

    3. "์‚ฌ์šฉ ๊ถŒํ•œ"์—์„œ ์กฐ์ง ๊ถŒํ•œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋“œ๋กญ๋‹ค์šด ๋ฉ”๋‰ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์•ก์„ธ์Šค ๊ถŒํ•œ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

      • ์ž์ฒด ํ˜ธ์ŠคํŠธํ˜• ์‹คํ–‰๊ธฐ: ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ
  2. GitHub App์„(๋ฅผ) ๋งŒ๋“  ํ›„ GitHub App์˜ ํŽ˜์ด์ง€์—์„œ "์•ฑ ID" ๊ฐ’์„ ๋ฉ”๋ชจํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ฐ’์€ ์ดํ›„์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  3. "ํ”„๋ผ์ด๋น— ํ‚ค"์—์„œ ํ”„๋ผ์ด๋น— ํ‚ค ์ƒ์„ฑ์„ ํด๋ฆญํ•˜๊ณ , .pem ํŒŒ์ผ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ‚ค๋Š” ์ดํ›„์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  4. ํŽ˜์ด์ง€์˜ ์™ผ์ชฝ ์œ„ ๋ชจ์„œ๋ฆฌ์— ์žˆ๋Š” ๋ฉ”๋‰ด์—์„œ ์•ฑ ์„ค์น˜๋ฅผ ํด๋ฆญํ•˜๊ณ  ์กฐ์ง ์˜†์— ์žˆ๋Š” ์„ค์น˜๋ฅผ ํด๋ฆญํ•˜์—ฌ ์กฐ์ง์— ์•ฑ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

  5. ์กฐ์ง์— ๋Œ€ํ•œ ์„ค์น˜ ๊ถŒํ•œ์„ ํ™•์ธํ•œ ํ›„ ์•ฑ ์„ค์น˜ ID๋ฅผ ๊ธฐ๋กํ•ด ๋‘ก๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ URL ํ˜•์‹์˜ ์•ฑ ์„ค์น˜ ํŽ˜์ด์ง€์—์„œ ์•ฑ ์„ค์น˜ ID๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    https://github.com/organizations/ORGANIZATION/settings/installations/INSTALLATION_ID

  6. ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋‹ค์šด๋กœ๋“œํ•œ ์•ฑ ID, ์„ค์น˜ ID ๋ฐ ๋‹ค์šด๋กœ๋“œํ•œ .pem ํ”„๋ผ์ด๋น— ํ‚ค ํŒŒ์ผ์„ Kubernetes์— ๋น„๋ฐ€๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

    GitHub App์˜ ๊ฐ’์„ Kubernetes์— ๋น„๋ฐ€๋กœ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    gha-runner-scale-set ์ฐจํŠธ๊ฐ€ ์„ค์น˜๋œ ๋™์ผํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋น„๋ฐ€์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋น ๋ฅธ ์‹œ์ž‘ ์„ค๋ช…์„œ์™€ ์ผ์น˜ํ•˜๊ธฐ ์œ„ํ•ด arc-runners์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Actions Runner Controller์— ๋Œ€ํ•œ ๋น ๋ฅธ ์‹œ์ž‘์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    Bash
    kubectl create secret generic pre-defined-secret \
       --namespace=arc-runners \
       --from-literal=github_app_id=123456 \
       --from-literal=github_app_installation_id=654321 \
       --from-literal=github_app_private_key='-----BEGIN RSA PRIVATE KEY-----********'
    

    ๋‹ค์Œ์œผ๋กœ values.yaml ํŒŒ์ผ ๋ณต์‚ฌ๋ณธ์˜ githubConfigSecret ์†์„ฑ์„ ๋น„๋ฐ€ ์ด๋ฆ„์— ์ฐธ์กฐ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

    githubConfigSecret: pre-defined-secret
    

์ถ”๊ฐ€ Helm ๊ตฌ์„ฑ ์˜ต์…˜์€ ARC ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ values.yaml์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

personal access token (classic)์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ARC ์ธ์ฆ

ARC๋Š” personal access tokens (classic)์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ํ˜ธ์ŠคํŠธํ˜• ์‹คํ–‰๊ธฐ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํ•„์š”ํ•œ ๋ฒ”์œ„๊ฐ€ ์žˆ๋Š” personal access token (classic)์„(๋ฅผ) ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ฒ”์œ„๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋˜๋Š” ์กฐ์ง ์ˆ˜์ค€์—์„œ ์‹คํ–‰๊ธฐ๋ฅผ ๋“ฑ๋กํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. personal access token (classic)๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ์ธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋‹ค์Œ์€ ARC ์‹คํ–‰๊ธฐ์˜ ํ•„์ˆ˜ personal access token ๋ฒ”์œ„ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

    • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์‹คํ–‰๊ธฐ: repo
    • ์กฐ์ง ์‹คํ–‰๊ธฐ: admin:org
  2. personal access token (classic)์˜ ๊ฐ’์œผ๋กœ Kubernetes ๋น„๋ฐ€์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    gha-runner-scale-set ์ฐจํŠธ๊ฐ€ ์„ค์น˜๋œ ๋™์ผํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋น„๋ฐ€์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋น ๋ฅธ ์‹œ์ž‘ ์„ค๋ช…์„œ์™€ ์ผ์น˜ํ•˜๊ธฐ ์œ„ํ•ด arc-runners์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Actions Runner Controller์— ๋Œ€ํ•œ ๋น ๋ฅธ ์‹œ์ž‘์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    Bash
    kubectl create secret generic pre-defined-secret \
       --namespace=arc-runners \
       --from-literal=github_token='YOUR-PAT'
    
  3. values.yaml ํŒŒ์ผ ๋ณต์‚ฌ๋ณธ์—์„œ ๋น„๋ฐ€ ์ด๋ฆ„์„ ์ฐธ์กฐ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

    githubConfigSecret: pre-defined-secret
    

    ์ถ”๊ฐ€ Helm ๊ตฌ์„ฑ ์˜ต์…˜์€ ARC ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ values.yaml์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

fine-grained personal access token์„ ์‚ฌ์šฉํ•˜์—ฌ ARC ์ธ์ฆ

ARC๋Š” fine-grained personal access tokens์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด ํ˜ธ์ŠคํŒ… ๋Ÿฌ๋„ˆ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํ•„์š”ํ•œ ๋ฒ”์œ„๊ฐ€ ์žˆ๋Š” fine-grained personal access token์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ฒ”์œ„๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋˜๋Š” ์กฐ์ง ์ˆ˜์ค€์—์„œ ๋Ÿฌ๋„ˆ๋ฅผ ๋“ฑ๋กํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. fine-grained personal access token์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ฐœ์ธ์šฉ ์•ก์„ธ์Šค ํ† ํฐ ๊ด€๋ฆฌ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    ๋‹ค์Œ์€ ARC ์‹คํ–‰๊ธฐ์˜ ํ•„์ˆ˜ personal access token ๋ฒ”์œ„ ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค.

    • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋Ÿฌ๋„ˆ:

      • ๊ด€๋ฆฌ: ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ
    • ์กฐ์ง ๋Ÿฌ๋„ˆ:

      • ๊ด€๋ฆฌ: ์ฝ๊ธฐ
      • ์ž์ฒด ํ˜ธ์ŠคํŠธํ˜• ์‹คํ–‰๊ธฐ: ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ
  2. fine-grained personal access token์˜ ๊ฐ’์œผ๋กœ Kubernetes ๋น„๋ฐ€์„ ๋งŒ๋“ค๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ์ฐธ๊ณ  ํ•ญ๋ชฉ

    gha-runner-scale-set ์ฐจํŠธ๊ฐ€ ์„ค์น˜๋œ ๋™์ผํ•œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋น„๋ฐ€์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋Š” ๋น ๋ฅธ ์‹œ์ž‘ ์„ค๋ช…์„œ์™€ ์ผ์น˜ํ•˜๊ธฐ ์œ„ํ•ด arc-runners์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Actions Runner Controller์— ๋Œ€ํ•œ ๋น ๋ฅธ ์‹œ์ž‘์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    Bash
    kubectl create secret generic pre-defined-secret \
       --namespace=arc-runners \
       --from-literal=github_token='YOUR-PAT'
    
  3. values.yaml ํŒŒ์ผ ๋ณต์‚ฌ๋ณธ์—์„œ ๋น„๋ฐ€ ์ด๋ฆ„์„ ์ฐธ์กฐ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

    githubConfigSecret: pre-defined-secret
    

    ์ถ”๊ฐ€ Helm ๊ตฌ์„ฑ ์˜ต์…˜์€ ARC ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ values.yaml์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜์—ฌ ARC ์ธ์ฆ

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ ํ†ตํ•ฉ์€ ํ˜„์žฌ Azure Key Vault๋ฅผ ์ง€์›ํ•˜๋Š” ๊ณต๊ฐœ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

gha-runner-scale-set ๋ฒ„์ „ 0.12.0๋ถ€ํ„ฐ ARC๋Š” ์™ธ๋ถ€ ์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ์—์„œ GitHub ์ž๊ฒฉ ์ฆ๋ช… ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ ํ†ตํ•ฉ์€ ์‹คํ–‰๊ธฐ ํ™•์žฅ ์ง‘ํ•ฉ๋ณ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ณด์•ˆ ๋ฐ ์šด์˜ ์š”๊ตฌ ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ผ๋ถ€ ํ™•์žฅ ์ง‘ํ•ฉ์€ Kubernetes ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ํ™•์žฅ ์ง‘ํ•ฉ์€ ์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ ๊ธฐ๋ฐ˜ ๋น„๋ฐ€์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ ํ†ตํ•ฉ ์‚ฌ์šฉ

์‹คํ–‰๊ธฐ ํ™•์žฅ ์ง‘ํ•ฉ์— ์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  1. values.yaml ํŒŒ์ผ์˜ githubConfigSecret ํ•„๋“œ๋ฅผ ์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ์— ์ €์žฅ๋œ ๋น„๋ฐ€ ํ‚ค์˜ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ๋ฌธ์ž์—ด์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ ์ ˆํ•œ ๊ณต๊ธ‰์ž์™€ ์•ก์„ธ์Šค ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ด์šฉํ•˜์—ฌ values.yaml ํŒŒ์ผ์—์„œ keyVault ์„น์…˜์˜ ์ฃผ์„ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๊ตฌ์„ฑํ•˜์„ธ์š”.
  3. ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ˆ˜์‹ ๊ธฐ ๋ชจ๋‘์—ํ•„์š”ํ•œ ์ธ์ฆ์„œ(.pfx)๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. *์ธ์ฆ์„œ๊ฐ€ ํฌํ•จ๋œ ์ปจํŠธ๋กค๋Ÿฌ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ฑฐ๋‚˜ *listenerTemplate ๋ฐ controllerManager ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ˆ˜์‹ ๊ธฐ ๋ชจ๋‘์˜ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธํ•ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€ ํ˜•์‹

Azure Key Vault์— ์ €์žฅ๋œ ๋น„๋ฐ€์€ JSON ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ๋Š” ์‚ฌ์šฉ ์ค‘์ธ ์ธ์ฆ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์˜ˆ: GitHub ํ† ํฐ

{
  "github_token": "TOKEN"
}

์˜ˆ: GitHub ์•ฑ

{
  "github_app_id": "APP_ID_OR_CLIENT_ID",
  "github_app_installation_id": "INSTALLATION_ID",
  "github_app_private_key": "PRIVATE_KEY"
}

์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ ํ†ตํ•ฉ์„ ์œ„ํ•œ values.yaml ๊ตฌ์„ฑ

์ธ์ฆ์„œ๋Š” .pfx ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๊ณ  /akv/cert.pfx์˜ ์ปจํ…Œ์ด๋„ˆ์— ๋งˆ์šดํŠธ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ธ์ฆ์— ์ด ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก keyVault ์„น์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

keyVault:
  type: "azure_key_vault"
  proxy:
    https:
      url: "PROXY_URL"
      credentialSecretRef: "PROXY_CREDENTIALS_SECRET_NAME"
    http: {}
    noProxy: []
  azureKeyVault:
    clientId: <AZURE_CLIENT_ID>
    tenantId: <AZURE_TENANT_ID>
    url: <AZURE_VAULT_URL>
    certificatePath: "/akv/cert.pfx"

์ปจํŠธ๋กค๋Ÿฌ ๋ฐ ์ˆ˜์‹ ๊ธฐ์— ์ธ์ฆ์„œ ์ œ๊ณต

ARC๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ž๊ฒฉ ์ฆ๋ช… ๋ชจ์Œ์„ ์ธ์ฆํ•˜๊ธฐ ์œ„ํ•ด .pfx ์ธ์ฆ์„œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ์ฆ์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ์„ค์น˜ ์ค‘์— ์ปจํŠธ๋กค๋Ÿฌ์™€ ์ˆ˜์‹ ๊ธฐ ๊ตฌ์„ฑ ์š”์†Œ ๋ชจ๋‘์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. values.yaml ํŒŒ์ผ์—์„œ controllerManager ๋ฐ listenerTemplate ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„œ๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ๋งˆ์šดํŠธํ•˜์—ฌ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

volumes:
  - name: cert-volume
    secret:
      secretName: my-cert-secret
volumeMounts:
  - mountPath: /akv
    name: cert-volume
    readOnly: true

listenerTemplate:
  volumeMounts:
    - name: cert-volume
      mountPath: /akv/certs
      readOnly: true
  volumes:
    - name: cert-volume
      secret:
        secretName: my-cert-secret

์•„๋ž˜ ์ฝ”๋“œ๋Š” ํ™•์žฅ ์ง‘ํ•ฉ values.yml ํŒŒ์ผ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

listenerTemplate:
  spec:
    containers:
      - name: listener
        volumeMounts:
          - name: cert-volume
            mountPath: /akv
            readOnly: true
    volumes:
      - name: cert-volume
        secret:
          secretName: my-cert-secret

๋‹ค์Œ์€ Apache-2.0 ๋ผ์ด์„ ์Šค์—์„œ https://github.com/actions/actions-runner-controller/๋กœ๋ถ€ํ„ฐ ์ผ๋ถ€ ์กฐ์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Copyright 2019 Moto Ishizawa

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.