説明
API サーバーや kubelet の HTTPS 接続には、有効なサーバー証明書と対応する秘密鍵が必要です。明示的なファイル設定がなくても、自己署名証明書の生成や承認された発行手順を使う場合があるため、パスの欠落だけで平文通信とは判断できません。
実際に提示される証明書を、クライアントが信頼する CA と正しいサーバー名で検証することが重要です。
想定される影響
- サーバー証明書を検証しないと、相手のなりすましを適切に拒否できません。
- 誤った証明書・鍵の組み合わせや期限切れは、接続障害につながる可能性があります。
対処方法
- ファイルを直接管理する場合は、
--tls-cert-fileと--tls-private-key-fileに有効な組み合わせを指定してください。kubelet の構成ファイルの TLS 設定も確認してください。 - 自動発行を使う場合は、承認・更新手順とクライアントの CA 信頼が機能することを確認してください。
- 秘密鍵へのアクセスを制限し、証明書のサーバー名・有効期限と実際の HTTPS 接続を試験してください。
例
Kubernetes 1.6.0 の API サーバー引数を示す過去の抜粋です。ファイル名は例なので、実際の PEM 証明書・鍵の内容と配備先のパスを適用してください。
変更前
yaml
apiVersion: v1
kind: Pod
metadata:
name: command-demo
spec:
containers:
- name: command-demo-container
image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
command: ["kube-apiserver"]
args: []
TLS ファイルを明示していません。実際に生成・提供される証明書と、クライアントの検証設定を確認する必要があります。
変更後
yaml
apiVersion: v1
kind: Pod
metadata:
name: command-demo
spec:
containers:
- name: command-demo-container
image: gcr.io/google_containers/kube-apiserver-amd64:v1.6.0
command: ["kube-apiserver"]
args: ["--tls-cert-file=someFile.txt", "--tls-private-key-file=someFile.txt"]
証明書と秘密鍵のパスを指定しています。例の someFile.txt という名前だけを信用せず、実際のファイルに正しい証明書と対応する鍵があることを確認してください。