kubernetes https外部ユーザー証明書アクセス

2572 ワード

質問:k 8 sサービスをするときは一般的にk 8 sと統合されたサービス、例えばjenkins ansibleなどがサービスaccout認証をサポートしていますが、サービスaccout認証は比較的よく(時間があればサービスaccoutの取得過程を書きます)、今日grafanaがk 8 sクラスタに接続することに遭遇しましたが、サービスaccountはサポートされていません.証明書しか使えません.もともとhttpsに抵抗があります.仕方なく思い切ってやるしかなくて、公式サイトのドキュメントをめくってやっと解決して、以下は以下のステップを分かち合って他の人が穴に落ちないようにします
 
一:ユーザーを作成して権限をバインドし、grafanaユーザーを作成し、クラスタ管理者権限をバインドする.便宜上、権限に対して厳格な要求は自分の権限に従って管理することができる.
 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: grafana-cluster-role-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: User
  name: grafana
  apiGroup: rbac.authorization.k8s.io

二、grafanaのクライアント証明書の作成
1、copy kubernetes masterノードのルート証明書と秘密鍵を任意のlinuxサーバに渡す
             scp ${master_ip}/etc/kubernetes/pki/ca*  user@youmachine:/path
注:必ずk 8 sのルート証明書を使って、公式サイトのあげた例は自分で署名したので、経験証はだめです
2.クライアント秘密鍵ファイルの生成
        openssl genrsa -out client.key 2048
クライアントを生成key秘密鍵ファイル
3、証明書署名要求プロファイルcsrを作成する.conf
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
CN = grafana

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = kubernetes
DNS.2 = kubernetes.default
DNS.3 = kubernetes.default.svc
DNS.4 = kubernetes.default.svc.cluster
DNS.5 = kubernetes.default.svc.cluster.local

以上、公式サイトに基づいて変更された.公式サイトによると、k 8 sはCN(common name)を読み取ってユーザー名を取得するだけで、grafanaユーザー名を置き換えるだけでよいという.
4、証明書署名要求の作成
    openssl req -new -key client.key -out client.csr -config csr.conf
クライアントを生成csrファイル
5、kubernetesのルート証明書と秘密鍵でクライアント証明書を発行する(ここのcat.crtに注意して、ca.keyはk 8 sのルート証明書である)
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 10000 -extensions v3_ext -extfile csr.conf

クライアントを生成crt証明書
三検証:
curl -v https://masterip:6443/  --cert ./client.crt --key ./client.key  --cacert ca.crt
   curl -v https://masterip:6443/  --cert ./client.crt --key ./client.key  --insecure

ここのクライアントcrtはクライアント証明書client.keyはクライアント秘密鍵ca.crtがルート証明書である
 
 
 
 
注:本人はアリクラウドが提供するk 8 sサービスrbacベースの
k 8 sドキュメント:英語が上手な人は直接見ることができます
クライアント証明書の生成(ピットあり):https://kubernetes.io/docs/concepts/cluster-administration/certificates/
ユーザー認証ポリシー:https://kubernetes.io/docs/reference/access-authn-authz/authentication/#user-impersonation
rbac構成:https://kubernetes.io/docs/reference/access-authn-authz/rbac/