Kubernetes証明書を10年間の有効期間で更新します

kubeadmを使用してkubernetesクラスターをインストールするのは非常に便利ですが、デフォルトの証明書の有効期間が1年しかないという厄介な問題もあるため、証明書のアップグレードの問題を考慮する必要があります。この記事のデモクラスターバージョンはv1.17.0バージョンであり、次の操作は保証されません。他のバージョンも適用可能であり、操作エラーがロールバックされないように、操作の前に証明書ディレクトリをバックアップする必要があります。この記事では、主にクラスター証明書を更新する2つの方法を紹介します。

##証明書を手動で更新する
Kubernetes証明書を10年間の有効期間で更新します
このコマンドは、/ etc / kubernetes / pkiフォルダー内のクライアント証明書と、kubeadmが使用するKUBECONFIGファイルに埋め込まれているクライアント証明書の有効期限/残り時間を表示します。

kubeadmは、外部CAによって署名された証明書を管理できません。外部証明書の場合は、証明書の更新を手動で管理する必要があります。

kubeadmは証明書を自動的に更新するようにkubeletを構成するため、kubelet.confは上記のリストに含まれていないことに注意してください。

さらに、コントロールパネルがアップグレードされると、kubeadmはすべての証明書を自動的に更新するため、kubeadmを使用してクラスターを構築する最善の方法は、クラスターを頻繁にアップグレードすることです。これにより、クラスターを最新の状態に保ち、適切なセキュリティを維持できます。ただし、実際の実稼働環境では、クラスターを頻繁にアップグレードしない可能性があるため、現時点では、証明書を手動で更新する必要があります。

証明書を手動で更新することも非常に便利です。kubeadmalphacertsrenewコマンドを使用して証明書を更新するだけです。このコマンドは、CA(またはfront-proxy-CA)証明書と/ etc / kubernetes / pkiに格納されているキーを使用します。更新を実行します。

可用性の高いクラスターを実行している場合、このコマンドはすべてのコントロールパネルノードで実行する必要があります。

次に、クラスター証明書を更新します。次の操作はすべてマスターノードで実行されます。最初に、元の証明書をバックアップします。
[root @ k8s-1〜]#mkdir /etc/kubernetes.bak
[root @ k8s-1〜]#cp -r /etc/kubernetes/pki/ /etc/kubernetes.bak/
[root @ k8s- 1〜]#cp /etc/kubernetes/*.conf /etc/kubernetes.bak/

次に、etcdデータディレクトリをバックアップします。
[root @ k8s-1〜] #cp -r / var / lib / etcd /var/lib/etcd.bak

次に、次のコマンドを実行して証明書を更新します。
[root @ k8s-1〜] #kubeadm config view> kubeadm.yaml
kubeadm.yamlファイルがない場合は、最初にyamlファイル
生成してから、証明書を更新します。
Kubernetes証明書を10年間の有効期間で更新します

証明書のワンクリック更新は、上記のコマンドで完了します。この時点で、上記の証明書を表示すると、有効期限が1年後であることがわかります。

Kubernetes証明書を10年間の有効期間で更新します

次に、kubeconfigファイルを更新することを忘れないでください。

Kubernetes証明書を10年間の有効期間で更新します

元の管理ファイルを新しく生成された管理構成ファイルで上書きします。

[root @ k8s-1〜] #mv $ HOME / .kube / config $ HOME / .kube / config.old
[root @ k8s-1〜] #cp -i /etc/kubernetes/admin.conf $ HOME /。
kube / config [root @ k8s-1〜] #chown $(id -u):$(id -g)$ HOME / .kube / config

完了後、4つのコンテナkube-apiserver、kube-controller、kube-schedulerなどを再起動します。apiserver証明書の有効期間をチェックして、更新が成功したかどうかを確認できます。

[root @ k8s-1〜] #echo | openssl s_client -showcerts -connect 127.0.0.1:6443 -servername api 2> / dev / null | openssl x509 -noout -enddate
notAfter = Oct 21 07:19:04 2021 GMT

現在の有効期間は1年後であることがわかります。これは、更新が成功したことを示しています。

## Kubernetes証明書APIを使用して証明書を更新します

上記のワンクリックの手動証明書更新に加えて、Kubernetes証明書APIを使用して手動証明書更新を実行することもできます。オンライン環境では、クラスターを頻繁に更新したり、証明書を更新したりするリスクを冒さない可能性があります。結局、リスクが高いため、生成された証明書の有効期間を十分に長くすることをお勧めします。セキュリティの観点からはお勧めしませんが、お勧めしません。シナリオによっては、十分に長い証明書の有効期間も非常に必要です。多くの管理者は、kubeadmのソースコードを手動で10年に変更してから、再コンパイルしてクラスターを作成します。この方法で目的を達成することはできますが、特にクラスターを更新する場合は、この方法を使用することはお勧めしません。新しいバージョンで更新する必要があります。実際、Kubernetesは、十分に長い証明書の有効期間を生成するのに役立つAPIメソッドを提供します。

組み込みのAPIメソッドを使用して署名するには、最初にkube-controller-managerコンポーネントの--experimental-cluster-signing-durationパラメーターを構成して10年に調整する必要があります。これはkubeadmによってインストールされたクラスターなので、静的を直接変更します。ポッドのyamlファイルは次のようになります。

vim /etc/kubernetes/manifests/kube-controller-manager.yaml
Kubernetes証明書を10年間の有効期間で更新します

変更が完了すると、kube-controller-managerが自動的に再起動して有効になります。次に、次のコマンドを使用して、Kubernetes証明書APIの証明書署名要求を作成する必要があります。cert-managerなどの外部署名者を設定すると、証明書署名要求(CSR)が自動的に承認されます。それ以外の場合は、kubectlcertificateコマンドを使用して証明書を手動で承認する必要があります。次のkubeadmコマンドは、承認される証明書の名前を出力し、承認が行われるのを待ちます。

$ kubeadm alphacertsはすべてを更新します--use-api--config kubeadm.yaml&

出力は次のようになります。

Kubernetes証明書を10年間の有効期間で更新します

次に、証明書を手動で承認する必要があります。

[root @ k8s-1〜] #kubectl get csr
NAME AGE REQUESTOR CONDITION
kubeadm-cert-kube-apiserver-dcc55 88skubernetes-admin保留中
kubeadm-cert-kubernetes-admin-r54fc5m18skubernetes-admin保留中
kubeadm-cert admin-x4qjq 2m52s kubernetes-admin承認済み、発行済み

証明書を手動で承認する

$ kubectl証明書承認kubeadm-cert-kubernetes-admin-r54fccertificatesigningrequest.certificates.k8s.io/kubeadm-cert-kubernetes-admin-pn99f
承認済み

csrが更新されるたびに、新しいcsrが生成されます

すべてのcsrが承認されるまで、同じ方法で保留状態のcsrの承認操作を実行します。最後に、すべてのcsrリストのステータスは次のとおりです。

Kubernetes証明書を10年間の有効期間で更新します

承認後、証明書の有効期間を確認してください。

Kubernetes証明書を10年間の有効期間で更新します

CA証明書の有効期間が10年しかないため、10年延長されていることがわかります。

ただし、コントロールパネルのいくつかのコンポーネントを直接再起動することはできません。これは、kubeadmとともにインストールされたクラスターに対応するetcdが、デフォルトで/etc/kubernetes/pki/etcd/ca.crt証明書を使用して前の手順を実行するためです。コマンドkubectlcertificate approveによって承認された証明書は、デフォルトの/etc/kubernetes/pki/ca.crt証明書で発行されるため、etcdのCA証明書を置き換える必要があります。

##最初に静的ポッドリソースリストをコピーします

[root @ k8s-1〜] #cp -r / etc / kubernetes / manifests / /etc/kubernetes/manifests.bak

[root @ k8s-1〜] #vim /etc/kubernetes/manifests/etcd.yaml
Kubernetes証明書を10年間の有効期間で更新します

kube-apiserverはetcdクラスターに接続する必要があるため、対応するetcdcaファイルも修正する必要があります。

[root @ k8s-1〜] #vim /etc/kubernetes/manifests/kube-apiserver.yaml

Kubernetes証明書を10年間の有効期間で更新します

さらに、requestheader-client-ca-fileファイルを置き換える必要があります。デフォルトは/etc/kubernetes/pki/front-proxy-ca.crtファイルです。次に、デフォルトのCAファイルに置き換える必要があります。それ以外の場合は、次のような集約APIを使用します。あなたがmetrics-serverをインストールしてkubectltopコマンドを実行した後、エラーが報告されます:

[root @ k8s-1〜] #cp /etc/kubernetes/pki/ca.crt /etc/kubernetes/pki/front-proxy-ca.crt
[root @ k8s-1〜] #cp / etc / kubernetes / pki /ca.key /etc/kubernetes/pki/front-proxy-ca.key

静的ポッドであるため、上記のコンポーネントは、変更が完了すると自動的に再起動して有効になります。現在のバージョンのkubeletでは、デフォルトで自動証明書ローテーションが有効になっているため、kubelet証明書を管理する必要がなくなったため、証明書を有効期間10に更新します。操作エラーのロールバックを防ぐために、操作の前に必ず証明書ディレクトリをバックアップしてください。

おすすめ

転載: blog.51cto.com/14181888/2542769