210 lines
5.9 KiB
Markdown
210 lines
5.9 KiB
Markdown
# 認証のためのKubernetes構成ファイルの生成
|
||
|
||
このラボでは、KubernetesクライアントがKubernetes APIサーバーを見つけて認証できるようにする[Kubernetes構成ファイル](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)、別名kubeconfigを生成します。
|
||
|
||
## クライアント認証構成
|
||
|
||
このセクションでは、`kubelet`および`admin`ユーザーのためのkubeconfigファイルを生成します。
|
||
|
||
### kubeletのKubernetes構成ファイル
|
||
|
||
Kubeletのためのkubeconfigファイルを生成する際には、Kubeletのノード名に一致するクライアント証明書を使用する必要があります。これにより、KubeletがKubernetesの[ノード認可者](https://kubernetes.io/docs/reference/access-authn-authz/node/)によって適切に認可されることが保証されます。
|
||
|
||
> 以下のコマンドは、[TLS証明書の生成](04-certificate-authority.md)ラボで使用したディレクトリ内で実行する必要があります。
|
||
|
||
node-0ワーカーノードのためのkubeconfigファイルを生成します:
|
||
|
||
```bash
|
||
for host in node-0 node-1; do
|
||
kubectl config set-cluster kubernetes-the-hard-way \
|
||
--certificate-authority=ca.crt \
|
||
--embed-certs=true \
|
||
--server=https://server.kubernetes.local:6443 \
|
||
--kubeconfig=${host}.kubeconfig
|
||
|
||
kubectl config set-credentials system:node:${host} \
|
||
--client-certificate=${host}.crt \
|
||
--client-key=${host}.key \
|
||
--embed-certs=true \
|
||
--kubeconfig=${host}.kubeconfig
|
||
|
||
kubectl config set-context default \
|
||
--cluster=kubernetes-the-hard-way \
|
||
--user=system:node:${host} \
|
||
--kubeconfig=${host}.kubeconfig
|
||
|
||
kubectl config use-context default \
|
||
--kubeconfig=${host}.kubeconfig
|
||
done
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
node-0.kubeconfig
|
||
node-1.kubeconfig
|
||
```
|
||
|
||
### kube-proxyのKubernetes構成ファイル
|
||
|
||
`kube-proxy`サービスのためのkubeconfigファイルを生成します:
|
||
|
||
```bash
|
||
{
|
||
kubectl config set-cluster kubernetes-the-hard-way \
|
||
--certificate-authority=ca.crt \
|
||
--embed-certs=true \
|
||
--server=https://server.kubernetes.local:6443 \
|
||
--kubeconfig=kube-proxy.kubeconfig
|
||
|
||
kubectl config set-credentials system:kube-proxy \
|
||
--client-certificate=kube-proxy.crt \
|
||
--client-key=kube-proxy.key \
|
||
--embed-certs=true \
|
||
--kubeconfig=kube-proxy.kubeconfig
|
||
|
||
kubectl config set-context default \
|
||
--cluster=kubernetes-the-hard-way \
|
||
--user=system:kube-proxy \
|
||
--kubeconfig=kube-proxy.kubeconfig
|
||
|
||
kubectl config use-context default \
|
||
--kubeconfig=kube-proxy.kubeconfig
|
||
}
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
kube-proxy.kubeconfig
|
||
```
|
||
|
||
### kube-controller-managerのKubernetes構成ファイル
|
||
|
||
`kube-controller-manager`サービスのためのkubeconfigファイルを生成します:
|
||
|
||
```bash
|
||
{
|
||
kubectl config set-cluster kubernetes-the-hard-way \
|
||
--certificate-authority=ca.crt \
|
||
--embed-certs=true \
|
||
--server=https://server.kubernetes.local:6443 \
|
||
--kubeconfig=kube-controller-manager.kubeconfig
|
||
|
||
kubectl config set-credentials system:kube-controller-manager \
|
||
--client-certificate=kube-controller-manager.crt \
|
||
--client-key=kube-controller-manager.key \
|
||
--embed-certs=true \
|
||
--kubeconfig=kube-controller-manager.kubeconfig
|
||
|
||
kubectl config set-context default \
|
||
--cluster=kubernetes-the-hard-way \
|
||
--user=system:kube-controller-manager \
|
||
--kubeconfig=kube-controller-manager.kubeconfig
|
||
|
||
kubectl config use-context default \
|
||
--kubeconfig=kube-controller-manager.kubeconfig
|
||
}
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
kube-controller-manager.kubeconfig
|
||
```
|
||
|
||
### kube-schedulerのKubernetes構成ファイル
|
||
|
||
`kube-scheduler`サービスのためのkubeconfigファイルを生成します:
|
||
|
||
```bash
|
||
{
|
||
kubectl config set-cluster kubernetes-the-hard-way \
|
||
--certificate-authority=ca.crt \
|
||
--embed-certs=true \
|
||
--server=https://server.kubernetes.local:6443 \
|
||
--kubeconfig=kube-scheduler.kubeconfig
|
||
|
||
kubectl config set-credentials system:kube-scheduler \
|
||
--client-certificate=kube-scheduler.crt \
|
||
--client-key=kube-scheduler.key \
|
||
--embed-certs=true \
|
||
--kubeconfig=kube-scheduler.kubeconfig
|
||
|
||
kubectl config set-context default \
|
||
--cluster=kubernetes-the-hard-way \
|
||
--user=system:kube-scheduler \
|
||
--kubeconfig=kube-scheduler.kubeconfig
|
||
|
||
kubectl config use-context default \
|
||
--kubeconfig=kube-scheduler.kubeconfig
|
||
}
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
kube-scheduler.kubeconfig
|
||
```
|
||
|
||
### adminのKubernetes構成ファイル
|
||
|
||
`admin`ユーザーのためのkubeconfigファイルを生成します:
|
||
|
||
```bash
|
||
{
|
||
kubectl config set-cluster kubernetes-the-hard-way \
|
||
--certificate-authority=ca.crt \
|
||
--embed-certs=true \
|
||
--server=https://127.0.0.1:6443 \
|
||
--kubeconfig=admin.kubeconfig
|
||
|
||
kubectl config set-credentials admin \
|
||
--client-certificate=admin.crt \
|
||
--client-key=admin.key \
|
||
--embed-certs=true \
|
||
--kubeconfig=admin.kubeconfig
|
||
|
||
kubectl config set-context default \
|
||
--cluster=kubernetes-the-hard-way \
|
||
--user=admin \
|
||
--kubeconfig=admin.kubeconfig
|
||
|
||
kubectl config use-context default \
|
||
--kubeconfig=admin.kubeconfig
|
||
}
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
admin.kubeconfig
|
||
```
|
||
|
||
## Kubernetes構成ファイルの配布
|
||
|
||
node-0インスタンスに`kubelet`と`kube-proxy`のkubeconfigファイルをコピーします:
|
||
|
||
```bash
|
||
for host in node-0 node-1; do
|
||
ssh root@$host "mkdir /var/lib/{kube-proxy,kubelet}"
|
||
|
||
scp kube-proxy.kubeconfig \
|
||
root@$host:/var/lib/kube-proxy/kubeconfig \
|
||
|
||
scp ${host}.kubeconfig \
|
||
root@$host:/var/lib/kubelet/kubeconfig
|
||
done
|
||
```
|
||
|
||
コントローラーインスタンスに`kube-controller-manager`と`kube-scheduler`のkubeconfigファイルをコピーします:
|
||
|
||
```bash
|
||
scp admin.kubeconfig \
|
||
kube-controller-manager.kubeconfig \
|
||
kube-scheduler.kubeconfig \
|
||
root@server:~/
|
||
```
|
||
|
||
次: [データ暗号化構成とキーの生成](06-data-encryption-keys.md)
|