Kubernetesをデバッグする


既に知っているように、Kubernetesは簡単な技術ではありません.これは強力なクラウド技術ですが、問題をデバッグしたりトラブルシューティングしたり、いくつかの解決策をする方法を知ったりするのに時間がかかり、痛いかもしれません.
それは私があなたが2007年に見ることができるKubernetesについての技術的なスケッチの多くを作成した理由です"Understanding Kubernetes in a visual way" , 私はまた、新しいSketchNoteとオーディオコンテンツをミックスし、今私の新しいアイデアは、1つの問題/1つのニーズに焦点を当てた記事を公開することです.

必要


この最初の記事では、一つの必要性に焦点を当てます.
通常、私がクラスタに接続しているとき、私はすべての権利(クラスタ管理者)を持っているので、どのようにKubernetesクラスタに接続することができますかServiceAccount )?

なぜ?


あなたは多くの状況でこの必要性を持つことができます.
あなたが孤立してKubernetesクラスタ(またはseveralsクラスタ)を持っていると想像してくださいnamespace (例:チームごとのプロジェクト)そして、クラスタ内のユーザはClusterRole .
ユーザーの権限を追加または編集し、動作をテストする場合は、ユーザーとしてテストする必要があります.

何?



この記事では、KubernetesクラスタでKubectlコマンドを実行することが必要ですClusterRole . ユーザーは、秘密鍵の読み取り専用の権利を持つことができますnamespace .

どうやって?


このユースケースでは、既にRoles and ClusterRoles あなたのクラスタでは、あなたがそれらをテストしたいのでClusterRole この設定をテストしたい場合は、次の手順を使用してClusterRole :
  • 0 . aClusterRole その補助金はすべての秘密のアクセスを読むnamespaces クラスター内
  • apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: secret-reader
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["get", "watch", "list"]
    
    ここでは、あなたがAをつくることができるステップのリストnamespace , この名前空間にいくつかの権限を追加できるKubernetesリソースを展開し、Kubeconfigファイルを生成し、KuberNetesクラスタでコマンドを実行しますServiceAccount (あなたがテストしたい権利がある).
  • 1 . aを作成するnamespace "テストNS "
  • $ kubectl create ns test-ns
    
  • 2 . a createServiceAccount 私のSAテストnamespace
  • $ kubectl create serviceaccount my-sa-test -n test-ns
    
  • 3 . aを作成するRoleBinding 私のSAテストへのそのグラント秘密読者
  • $ kubectl create rolebinding read-pods -n test-ns --clusterrole=secret-reader --serviceaccount=test-ns.my-sa-test
    
  • 作成したファイルを作成しますServiceAccount 「私のSAテスト」
  • $ export SECRET_NAME_SA=`kubectl get sa my-sa-test -n test-ns -ojsonpath="{ .secrets[0].name }"`
    $ export TOKEN_SA=`kubectl get secret $SECRET_NAME_SA -n test-ns -ojsonpath='{.data.token}' | base64 -d`
    $ kubectl config view --raw --minify > kubeconfig.txt
    $ kubectl config unset users --kubeconfig=kubeconfig.txt
    $ kubectl config set-credentials ${SECRET_NAME_SA} --kubeconfig=kubeconfig.txt --token=${TOKEN_SA}
    $ kubectl config set-context --current --kubeconfig=kubeconfig.txt --user=${SECRET_NAME_SA}
    
  • クラスタ内のKubectlコマンドをServiceAccount
  • $ kubectl --kubeconfig=kubeconfig.txt get secrets -n test-ns
    
    または実行することができますkubectl ServiceAccountトークンで直接コマンドを実行します(別のKubeConfigファイルを作成する必要はありません)
    $ export NAMESPACE_SA=test-ns
    $ export TEAM_SA=my-sa-test
    
    $ export TOKEN=$(kubectl get $(kubectl get secret -o name -n ${NAMESPACE_SA} |grep  ${TEAM_SA} ) -o jsonpath='{.data.token}' -n ${NAMESPACE_SA} | base64 -d)
    
    $ kubectl --token=${TOKEN} get ns
    
    クール!
    今、私は自分のユーザとしての権利を持つことができます.

    結論


    私は、具体的な例とユースケースを使用して記事のこの新しいシリーズは、あなたのKubernetesの理解の旅に役立ちます願っています.