Kubeadm: ディスカバリートークンCAハッシュを取得するプログラム的な方法はありません

作成日 2018年01月12日  ·  11コメント  ·  ソース: kubernetes/kubeadm

kubeadm token create ..またはその他のメカニズムを介してトークンを作成する場合、kubeadm initの人間が読める形式の出力(したがって不安定)を解析する以外に、トークンCA証明書ハッシュを取得する方法はありません。 ハッシュを使用してトークンを作成する機械可読な方法が必要です。そうしないと、正しいこと(tm)を実行したい場合でも、-discovery-token-unsafe-skip-ca-verificationを使用する必要があります。 Atmの代替案は、kubeadm initの変更される可能性のある人間の読み取り出力を解析するか、caでkubeadmのハッシュ計算を再実装することです。 後者は、ソースを読み取る必要がない場合、つまりcd / etc / kubernetes / pki && sha256sum *の出力のいずれも、kubeadminitによる出力と同じ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トークンの生成であり、初期化および結合時にその値を再利用しました。kubeadmトークンの生成は、機械で読み取り可能な単一値の行で区切られていましたが、証明書ハッシュ(およびその形式のため、それ自体は拡張できません)。 機械可読な理由については、結合に渡す追加のパラメーターと、IPのDNSのように置き換える必要のあるパラメーターがあります。

うん、join-commandをファイルにダンプしてから、sedを使用してigno​​re-preflight-errorsフラグを追加する必要がありました。これはひどいことではありませんが、特に友好的でもありません。

そのため、フェーズを調整してよりプログラマティックにし、フラグを重複排除するための継続的な取り組みがあります。これは1つのユーザーストーリーにすぎません。 @fabriziopandiniこれについて、どこかに親の問題がありますか?

@timothysc
卒業フェーズの問題は#454ですが、それはちょっと時代遅れであり、次のKEPが承認されたらすぐに新しいものから始めるのが理にかなっているかもしれません。

ただし、この問題に関しては、IMOは専用の包括的な問題を開いて、すべてのコマンドで一貫した方法で機械可読出力の需要に取り組む必要があります。これは、要求がkubeadm init/phasesからkubeadm token及ぶためです。また、 kubeadm upgrade (#494を参照)。

WDYT? よろしければ、新しい傘の号を開きます...

私は自分でこの問題にぶつかった。 以下を使用して、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 network nic list -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"

for ip in $(az network public-ip list -g $ rg --query [?tags.module == 'k8sworkers']。ipAddress-o tsv)
NS
ssh $ ip $ joinCommand
終わり

このページは役に立ちましたか?
0 / 5 - 0 評価