@@ -11,15 +11,14 @@ Kubernetesでは、TLS認証のためにPKI証明書が必要です。
11
11
自身で証明書を作成することも可能です。例えば、秘密鍵をAPIサーバーに保持しないことで、管理をよりセキュアにする場合が挙げられます。
12
12
本ページでは、クラスターに必要な証明書について説明します。
13
13
14
-
15
-
16
14
<!-- body -->
17
15
18
16
## クラスターではどのように証明書が使われているのか
19
17
20
- Kubernetesは下記の用途でPKIを必要とします:
18
+ Kubernetesは下記の用途でPKIを必要とします:
21
19
22
20
* kubeletがAPIサーバーの認証をするためのクライアント証明書
21
+ * APIサーバーがkubeletと通信するためのkubeletの[ サーバー証明書] ( /docs/reference/access-authn-authz/kubelet-tls-bootstrapping/#client-and-serving-certificates )
23
22
* APIサーバーのエンドポイント用サーバー証明書
24
23
* クラスターの管理者がAPIサーバーの認証を行うためのクライアント証明書
25
24
* APIサーバーがkubeletと通信するためのクライアント証明書
@@ -36,11 +35,14 @@ Kubernetesは下記の用途でPKIを必要とします:
36
35
37
36
## 証明書の保存場所
38
37
39
- kubeadmを使用してKubernetesをインストールする場合、証明書は` /etc/kubernetes/pki ` に保存されます。このドキュメントの全てのパスは、そのディレクトリの相対パスを表します。
38
+ kubeadmを使用してKubernetesをインストールする場合、ほとんどの証明書は` /etc/kubernetes/pki ` に保存されます。このドキュメントの全てのパスは、そのディレクトリの相対パスを表します。
39
+ ただしユーザーアカウントの証明書に関しては、kubeadmは` /etc/kubernetes ` に配置します。
40
40
41
41
## 手動で証明書を設定する
42
42
43
- kubeadmで証明書を生成したくない場合は、下記の方法のいずれかで手動で生成可能です。
43
+ もしkubeadmに必要な証明書の生成を望まない場合、それらを単一ルート認証局を使って作成するか、全ての証明書を提供することで作成できます。
44
+ 自身の認証局を作成する詳細については、[ 証明書を手動で生成する] ( /ja/docs/tasks/administer-cluster/certificates/ ) を参照してください。
45
+ 証明書の管理についての詳細は、[ kubeadmによる証明書管理] ( /ja/docs/tasks/administer-cluster/kubeadm/kubeadm-certs/ ) を参照してください。
44
46
45
47
### 単一ルート認証局
46
48
@@ -55,6 +57,16 @@ kubeadmで証明書を生成したくない場合は、下記の方法のいず
55
57
| front-proxy-ca.crt,key | kubernetes-front-proxy-ca | [ front-end proxy] ( /docs/tasks/extend-kubernetes/configure-aggregation-layer/ ) 用 |
56
58
57
59
上記の認証局に加えて、サービスアカウント管理用に公開鍵/秘密鍵のペア(` sa.key ` と` sa.pub ` )を取得する事が必要です。
60
+ 次の例は、前の表で示されたCAのキーと証明書を示しています:
61
+
62
+ ```
63
+ /etc/kubernetes/pki/ca.crt
64
+ /etc/kubernetes/pki/ca.key
65
+ /etc/kubernetes/pki/etcd/ca.crt
66
+ /etc/kubernetes/pki/etcd/ca.key
67
+ /etc/kubernetes/pki/front-proxy-ca.crt
68
+ /etc/kubernetes/pki/front-proxy-ca.key
69
+ ```
58
70
59
71
### 全ての証明書
60
72
@@ -72,9 +84,14 @@ CAの秘密鍵をクラスターにコピーしたくない場合、自身で全
72
84
| kube-apiserver-kubelet-client | kubernetes-ca | system: masters | client | |
73
85
| front-proxy-client | kubernetes-front-proxy-ca | | client | |
74
86
87
+ {{< note >}}
88
+ ` kube-apiserver-kubelet-client ` にスーパーユーザーグループ` system:masters ` を使用する代わりに、より権限の低いグループを使用することができます。
89
+ そのために、kubeadmは` kubeadm:cluster-admins ` グループを使用します。
90
+ {{< /note >}}
91
+
75
92
[ 1] : クラスターに接続するIPおよびDNS名( [ kubeadm] ( /docs/reference/setup-tools/kubeadm/kubeadm/ ) を使用する場合と同様、ロードバランサーのIPおよびDNS名、` kubernetes ` 、` kubernetes.default ` 、` kubernetes.default.svc ` 、` kubernetes.default.svc.cluster ` 、` kubernetes.default.svc.cluster.local ` )
76
93
77
- ` kind ` は下記の [ x509の鍵用途 ] ( https://pkg.go.dev/k8s.io/ api/certificates/v1beta1#KeyUsage ) のタイプにマッピングされます :
94
+ ここで ` 種類 ` は、一つまたは複数のx509の鍵用途にマッピングされており、これは [ CertificateSigningRequest ] ( /docs/reference/kubernetes- api/authentication-resources/certificate-signing-request-v1#CertificateSigningRequest ) の ` .spec.usages ` にも記載されています :
78
95
79
96
| 種類 | 鍵の用途 |
80
97
| --------| ---------------------------------------------------------------------------------|
@@ -87,14 +104,14 @@ CAの秘密鍵をクラスターにコピーしたくない場合、自身で全
87
104
{{< /note >}}
88
105
89
106
{{< note >}}
90
- kubeadm利用者のみ:
107
+ kubeadm利用者のみ:
91
108
92
109
* 秘密鍵なしでCA証明書をクラスターにコピーするシナリオは、kubeadmドキュメントの外部認証局の項目で言及されています。
93
110
* kubeadmでPKIを生成すると、` kube-etcd ` 、` kube-etcd-peer ` および ` kube-etcd-healthcheck-client ` 証明書は外部etcdを利用するケースでは生成されない事に留意してください。
94
111
95
112
{{< /note >}}
96
113
97
- ### 証明書のパス
114
+ ### 証明書のパス {#certificate-paths}
98
115
99
116
証明書は推奨パスに配置するべきです([ kubeadm] ( /docs/reference/setup-tools/kubeadm/kubeadm/ ) を使用する場合と同様)。
100
117
パスは場所に関係なく与えられた引数で特定されます。
@@ -123,24 +140,67 @@ kubeadm利用者のみ:
123
140
| sa.key | | kube-controller-manager | service-account-private |
124
141
| | sa.pub | kube-apiserver | service-account-key |
125
142
126
- ## ユーザアカウント用に証明書を設定する
143
+ 次の例は、自分自身で全てのキーと証明書を生成している場合に提供する必要があるファイルパスを[ 前の表] ( #certificate-paths ) から示しています:
144
+
145
+ ```
146
+ /etc/kubernetes/pki/etcd/ca.key
147
+ /etc/kubernetes/pki/etcd/ca.crt
148
+ /etc/kubernetes/pki/apiserver-etcd-client.key
149
+ /etc/kubernetes/pki/apiserver-etcd-client.crt
150
+ /etc/kubernetes/pki/ca.key
151
+ /etc/kubernetes/pki/ca.crt
152
+ /etc/kubernetes/pki/apiserver.key
153
+ /etc/kubernetes/pki/apiserver.crt
154
+ /etc/kubernetes/pki/apiserver-kubelet-client.key
155
+ /etc/kubernetes/pki/apiserver-kubelet-client.crt
156
+ /etc/kubernetes/pki/front-proxy-ca.key
157
+ /etc/kubernetes/pki/front-proxy-ca.crt
158
+ /etc/kubernetes/pki/front-proxy-client.key
159
+ /etc/kubernetes/pki/front-proxy-client.crt
160
+ /etc/kubernetes/pki/etcd/server.key
161
+ /etc/kubernetes/pki/etcd/server.crt
162
+ /etc/kubernetes/pki/etcd/peer.key
163
+ /etc/kubernetes/pki/etcd/peer.crt
164
+ /etc/kubernetes/pki/etcd/healthcheck-client.key
165
+ /etc/kubernetes/pki/etcd/healthcheck-client.crt
166
+ /etc/kubernetes/pki/sa.key
167
+ /etc/kubernetes/pki/sa.pub
168
+ ```
169
+
170
+ ## ユーザーアカウント用に証明書を設定する
127
171
128
172
管理者アカウントおよびサービスアカウントは手動で設定しなければなりません。
129
173
130
- | ファイル名 | クレデンシャル名 | デフォルトCN | 組織 |
131
- | -------------------------| ----------------------------| --------------------------------| ----------------|
132
- | admin.conf | default-admin | kubernetes-admin | system: masters |
133
- | kubelet.conf | default-auth | system:node:` <nodeName> ` (see note) | system: nodes |
134
- | controller-manager.conf | default-controller-manager | system: kube-controller-manager | |
135
- | scheduler.conf | default-scheduler | system: kube-scheduler | |
174
+ | ファイル名 | クレデンシャル名 | デフォルトCN | O (in Subject) |
175
+ | -------------------------| ----------------------------| -------------------------------------| ------------------------|
176
+ | admin.conf | default-admin | kubernetes-admin | ` <admin-group> ` |
177
+ | super-admin.conf | default-super-admin | kubernetes-super-admin | system: masters |
178
+ | kubelet.conf | default-auth | system:node:` <nodeName> ` (備考を参照) | system: nodes |
179
+ | controller-manager.conf | default-controller-manager | system: kube-controller-manager | |
180
+ | scheduler.conf | default-scheduler | system: kube-scheduler | |
136
181
137
182
{{< note >}}
138
183
` kubelet.conf ` における` <nodeName> ` の値は** 必ず** APIサーバーに登録されたkubeletのノード名と一致しなければなりません。詳細は、[ Node Authorization] ( /docs/reference/access-authn-authz/node/ ) を参照してください。
139
184
{{< /note >}}
140
185
186
+ {{< note >}}
187
+ 上記の例での` <admin-group> ` は実装に依存します。
188
+ 一部のツールはデフォルトの` admin.conf ` 内の証明書に` system:masters ` グループの一部として署名します。
189
+ ` system:masters ` は緊急用のスーパーユーザーグループであり、RBACのようなKubernetesの認証レイヤーをバイパスすることができます。
190
+ また、一部のツールはこのスーパーユーザーグループに紐づけられた証明書を含む` super-admin.conf ` を生成しません。
191
+
192
+ kubeadmはkubeconfigファイル内に2つの別々の管理者証明書を生成します。
193
+ 一つは` admin.conf ` 内にあり、` Subject: O = kubeadm:cluster-admins, CN = kubernetes-admin ` となっています。
194
+ ` kubeadm:cluster-admins ` は` cluster-admin ` ClusterRoleに紐づけられたカスタムグループです。
195
+ このファイルは、kubeadmが管理する全てのコントロールプレーンマシン上で生成されます。
196
+
197
+ もう一つは` super-admin.conf ` 内にあり、` Subject: O = system:masters, CN = kubernetes-super-admin ` となっています。
198
+ このファイルは` kubeadm init ` が呼び出されたノード上でのみ生成されます。
199
+ {{< /note >}}
200
+
141
201
1 . 各コンフィグ毎に、CN名と組織を指定してx509証明書と鍵ペアを生成してください。
142
202
143
- 1 . 以下のように、各コンフィグで` kubectl ` を実行してください。
203
+ 2 . 以下のように、各コンフィグで` kubectl ` を実行してください。
144
204
145
205
``` shell
146
206
KUBECONFIG=< filename> kubectl config set-cluster default-cluster --server=https://< host ip> :6443 --certificate-authority < path-to-kubernetes-ca> --embed-certs
@@ -158,5 +218,12 @@ KUBECONFIG=<filename> kubectl config use-context default-system
158
218
| controller-manager.conf | kube-controller-manager | ` manifests/kube-controller-manager.yaml ` のマニフェストファイルに追記する必要があります。 |
159
219
| scheduler.conf | kube-scheduler | ` manifests/kube-scheduler.yaml ` のマニフェストファイルに追記する必要があります。 |
160
220
221
+ 以下のファイルは、前の表に挙げたファイルへの絶対パスを示しています:
161
222
162
-
223
+ ```
224
+ /etc/kubernetes/admin.conf
225
+ /etc/kubernetes/super-admin.conf
226
+ /etc/kubernetes/kubelet.conf
227
+ /etc/kubernetes/controller-manager.conf
228
+ /etc/kubernetes/scheduler.conf
229
+ ```
0 commit comments