web-dev-qa-db-ja.com

Azure AKSKubernetesクラスターの自己署名CAをGitLabCI / CD Kubernetes統合に追加するにはどうすればよいですか?

Azure AKSKubernetesクラスターをGitLabCI/CDKubernetes統合に追加しようとしています。

このコマンドを実行した後、PCからクラスターでkubectlコマンドを実行できます。

az aks get-credentials --resource-group <resource-group-name> --name <kubernetes-cluster-name>

次のような内容の.kube/configファイルを作成しました。

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: <some long base64 string here>
    server: https://<resource-group-name+some-hexadecimal-chars>.hcp.westeurope.azmk8s.io:443
  name: <kubernetes-cluster-name>
contexts:
- context:
    cluster: <kubernetes-cluster-name>
    user: clusterUser_<resource-group-name>_<kubernetes-cluster-name>
  name: <kubernetes-cluster-name>
current-context: <kubernetes-cluster-name>
kind: Config
preferences: {}
users:
- name: clusterUser_<resource-group-name>_<kubernetes-cluster-name>
  user:
    client-certificate-data: <some long base64 string here>
    client-key-data: <some long base64 string here>
    token: <some secret string of hexadecimal chars here>

GitLabフォームでは、次のフィールドを入力する必要があります。

  1. Kubernetesクラスター名
  2. APIURL
  3. CA証明書-認証局バンドル(PEM形式)
  4. トークン
  5. プロジェクトの名前付け(オプション、一意)

私はこれらの値を試しました:

  1. <kubernetes-cluster-name>を、Azureのクラスターの名前と、.kube/configファイルのクラスター名と一致するように配置しました。
  2. https://<resource-group-name+some-hexadecimal-chars>.hcp.westeurope.azmk8s.io:443ファイルからコピーしたURL.kube/configを配置しました。
  3. 最初にcertificate-authority-dataファイルから.kube/configを試しましたが、機能せず、.kube/configファイルから3つすべてのbase64文字列を試しました。どれも機能しませんでした。
  4. .kube/configファイルからトークンを置きました。
  5. オプションなので、これは空のままにします。

GitLabで、ボタンInstallを押してHelmTillerをインストールしようとすると、次のエラーが発生しました。

Something went wrong while installing Helm Tiller
Can't start installation process. nested asn1 error

そして時々私は代わりにこのエラーを受け取ります:

Kubernetes error: SSL_connect returned=1 errno=0 state=error: certificate verify failed

私は昨日からこれを機能させようとしていますが、グーグルでたくさん検索しましたが何も見つかりませんでした。

問題はこの3番目のフィールドであるCA証明書にあると思います。おそらく、コマンドラインazまたはkubectlからこのコンテンツを取得する他の方法があります。

GitLabからAzureAKSへのこのKubernetes統合をすでに機能させている人はいますか?

11
lmcarreiro

後で、GitLabの「AddKubernetescluster」フォームの_certificate-authority-data_フィールドにコンテンツをコピーしていた_.kube/config_ファイルの_CA Certificate_のbase64文字列がPEMであることがわかりました。形式ですが、base64でエンコードされています。

PEM形式は、すでに証明書ビットのbase64エンコード表現ですが、途中でいくつかの改行があります。このコンテンツ全体は、_.kube/config_に送られる前に再びbase64でエンコードされるため、大きなbase64単一行文字列に変換されます。

この大きな1行の文字列をbase64でデコードする必要がありました(Chromeのコンソールウィンドウでjavascript atob("....")を使用しました)。これにより、次のような結果が得られました。

_-----BEGIN CERTIFICATE-----
MIIEyDCCArCgAwIBAgIRAOL3N8oMIwWIxcFTZhTkfgMwDQYJKoZIhvcNAQELBQAw
...
...
...
5gP7yoL1peZ+AWjCgcUVZYiItqrBLpWYDgY9g8btYDUIiWlqkmC0+kBaPfwCtckx
cUp3vlwRITrv0mzrxiQjTLTUpEy7EcD+U6IecA==
-----END CERTIFICATE-----
_

次に、このコンテンツをGitLabの「CA証明書」フィールドにコピーしたところ、機能しました。

14
lmcarreiro