Kubeadm: ๊ฒ€์ƒ‰ ํ† ํฐ CA ํ•ด์‹œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹ ์—†์Œ

์— ๋งŒ๋“  2018๋…„ 01์›” 12์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubeadm

kubeadm token create .. ๋˜๋Š” ๋‹ค๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ†ตํ•ด ํ† ํฐ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ kubeadm init์˜ ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ถœ๋ ฅ(๋”ฐ๋ผ์„œ ์•ˆ์ •์ ์ด์ง€ ์•Š์Œ)์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ํ† ํฐ ca ์ธ์ฆ์„œ ํ•ด์‹œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ca ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๊ณ„ ํŒ๋… ๊ฐ€๋Šฅํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์ผ(tm)์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ์š•๊ตฌ๊ฐ€ ์žˆ๋”๋ผ๋„ --discovery-token-unsafe-skip-ca-verification์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Atm ๋Œ€์•ˆ์€ kubeadm init์˜ ๋ณ€๊ฒฝ๋œ ์ธ๊ฐ„ ์ฝ๊ธฐ ์ถœ๋ ฅ์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ฑฐ๋‚˜ ca์— ๋Œ€ํ•œ kubeadm์˜ ํ•ด์‹œ ๊ณ„์‚ฐ์„ ๋‹ค์‹œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. cd /etc/kubernetes/pki && sha256sum * ์˜ ์ถœ๋ ฅ์ด kubeadm init์˜ ์ถœ๋ ฅ๊ณผ ๋™์ผํ•œ sha๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค๋ฅผ ์ฝ์„ ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ํ›„์ž๋Š” ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

kinfeature prioritbacklog

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ตœ์‹  ๋ฒ„์ „์˜ kubeadm์„ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

# kubeadm token create --print-join-command
kubeadm join --token 5d2dc8.3e93f8449167639b 10.0.2.66:6443 --discovery-token-ca-cert-hash sha256:44a68d4a2c2a86e05cc0d4ee8c9c6b64352c54e450021331c483561e45b34388

๋ชจ๋“  11 ๋Œ“๊ธ€

์ตœ์‹  ๋ฒ„์ „์˜ kubeadm์„ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

# kubeadm token create --print-join-command
kubeadm join --token 5d2dc8.3e93f8449167639b 10.0.2.66:6443 --discovery-token-ca-cert-hash sha256:44a68d4a2c2a86e05cc0d4ee8c9c6b64352c54e450021331c483561e45b34388

์—ฌ์ „ํžˆ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ์€ ํ† ํฐ๊ณผ ๊ฒ€์ƒ‰ ํ† ํฐ ํ•ด์‹œ๋ฅผ ๋ชจ๋‘ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•ด ๋ช…๋ น์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ์ „ํ•˜๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก json๊ณผ ๊ฐ™์€ ์ถœ๋ ฅ ํ˜•์‹์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ณ„๋„์˜/์ƒˆ๋กœ์šด ๋ช…๋ น์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ชฐ๋ž์Šต๋‹ˆ๋‹ค. ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. json์— ์ด๊ฒƒ์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 1.6 ๋ฐ 1.7์— ๋Œ€ํ•œ ์ด์ „ ์›Œํฌํ”Œ๋กœ๋Š” kubeadm ํ† ํฐ ์ƒ์„ฑ์ด์—ˆ๊ณ  ์ดˆ๊ธฐํ™” ๋ฐ ์กฐ์ธ ์‹œ ํ•ด๋‹น ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. cert ํ•ด์‹œ(ํ•ด๋‹น ํ˜•์‹์œผ๋กœ ์ธํ•ด ๊ทธ ์ž์ฒด๋กœ ํ™•์žฅํ•  ์ˆ˜ ์—†์Œ). ์™œ ๊ธฐ๊ณ„๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š”์ง€, ์กฐ์ธ์„ ์œ„ํ•ด ์ „๋‹ฌํ•  ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๊ณ  ์ผ๋ถ€๋Š” ip์— ๋Œ€ํ•œ dns์™€ ๊ฐ™์ด ๊ต์ฒดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ์กฐ์ธ ๋ช…๋ น์„ ํŒŒ์ผ์— ๋คํ”„ํ•œ ๋‹ค์Œ sed๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋”์ฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํŠน๋ณ„ํžˆ ์นœ์ˆ™ํ•˜์ง€๋„ ์•Š์€ ignore-preflight-errors ํ”Œ๋ž˜๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค๊ณ  ํ”Œ๋ž˜๊ทธ์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ๊ณ„๋ฅผ ๋‹ค๋“ฌ๊ธฐ ์œ„ํ•œ ์ง€์†์ ์ธ ๋…ธ๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ์‚ฌ์šฉ์ž ์Šคํ† ๋ฆฌ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. @fabriziopandini ์–ด๋”˜๊ฐ€์— ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ถ€๋ชจ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@timothysc
์กธ์—… ๋‹จ๊ณ„์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” #454์ด์ง€๋งŒ ์ผ์ข…์˜ ๊ตฌ์‹์ด๋ฉฐ ๋‹ค๊ฐ€์˜ค๋Š” KEP๊ฐ€ ์Šน์ธ๋˜๋Š” ์ฆ‰์‹œ ์ƒˆ ๊ฒƒ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จํ•˜์—ฌ IMO์—์„œ๋Š” ์š”์ฒญ ๋ฒ”์œ„๊ฐ€ kubeadm init/phases ์—์„œ kubeadm token ์— ์ด๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋ช…๋ น์—์„œ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ๊ธฐ๊ณ„ ํŒ๋… ๊ฐ€๋Šฅ ์ถœ๋ ฅ์— ๋Œ€ํ•œ ์š”๊ตฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ „์šฉ ์šฐ์‚ฐ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค kubeadm upgrade (#494 ์ฐธ์กฐ).

์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด ์ƒˆ ์šฐ์‚ฐํ˜ธ๋ฅผ ์—ด๊ฒ ์Šต๋‹ˆ๋‹ค...

๋‚˜๋Š” ๋ฐฉ๊ธˆ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ca ์ธ์ฆ์„œ ๊ณต๊ฐœ ํ‚ค์˜ sha256sum์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

$ openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2>/dev/null | sha256sum | cut -d' ' -f1

์˜ˆ์˜์ง€ ์•Š์€...

์ •๊ทœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Ansible๋กœ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค.

- hosts: localhost
  tasks:
    - shell: kubeadm token create --print-join-command
      register: results
    - debug:
        var: results.stdout
    - set_fact:
        token: "{{ results.stdout | regex_search(regexp, '\\2') | first }}"
      vars:
        regexp: '([^\s]+\s){4}([^\s]+)'
    - debug:
        var: token
    - set_fact:
        hash: "{{ results.stdout | regex_search(regexp, '\\2') | first }}"
      vars:
        regexp: '([^\s]+\s){6}([^\s]+)'
    - debug:
        var: hash

๊ฒฐ๊ณผ:

TASK [debug] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "results.stdout": "kubeadm join 192.168.1.2:6443 --token 3a0fje.octau87o6x30dz8i --discovery-token-ca-cert-hash sha256:1fd18093fb89b364879d5667b7ec84fd24171c30de0070deb6a3801b54a0f85c"
}

TASK [set_fact] ****************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "token": "3a0fje.octau87o6x30dz8i"
}

TASK [set_fact] ****************************************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] *******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "hash": "sha256:1fd18093fb89b364879d5667b7ec84fd24171c30de0070deb6a3801b54a0f85c"
}

๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฏ€๋กœ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ถŒ์žฅ๋˜์ง€ ์•Š์ง€๋งŒ https://github.com/cablespaghetti/kubeadm-aws/blob/master/worker.sh#L45 --discovery-token-unsafe-skip-ca-verification ์—์„œ๋„ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Azure์—์„œ ์ž‘์—…์ž ๋ฐ ๋งˆ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ํƒœ๊ทธ ์‚ฌ์šฉ:
rg๋Š” RG ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

masterPrivateIp=$(az ๋„คํŠธ์›Œํฌ NIC ๋ชฉ๋ก -g $rg --query "[?tags.module == 'k8smasters'].ipConfigurations[0].privateIpAddress" -o tsv)
tokenId=$(ssh $masterIp "kubeadm ํ† ํฐ ๋ชฉ๋ก | grep -v TOKEN | cut -d' ' -f1")
tokenSHA=$(ssh $masterIp "openssl x509 -in /etc/kubernetes/pki/ca.crt -noout -pubkey | openssl rsa -pubin -outform DER 2>/dev/null | sha256sum | cut -d' ' -f1 ")

joinCommand="kubeadm Join $master PrivateIp:6443 --token $tokenId --discovery-token-ca-cert-hash sha256:$tokenSHA"

$(az network public-ip list -g $rg --query [?tags.module == 'k8sworkers'].ipAddress -o tsv)์˜ ip
~ํ•˜๋‹ค
ssh $ip $join๋ช…๋ น
์™„๋ฃŒ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰