Kubernetes 如何将加密提供程序配置选项添加到kube apiserver?
我使用的是kubernetes 1.15.7版本 我正在尝试按照链接在“kube apiserver”上启用“加密提供程序配置”选项 我编辑了文件“/etc/kubernetes/manifests/kube-apiserver.yaml”,并提供了以下选项Kubernetes 如何将加密提供程序配置选项添加到kube apiserver?,kubernetes,kubeadm,Kubernetes,Kubeadm,我使用的是kubernetes 1.15.7版本 我正在尝试按照链接在“kube apiserver”上启用“加密提供程序配置”选项 我编辑了文件“/etc/kubernetes/manifests/kube-apiserver.yaml”,并提供了以下选项 - --encryption-provider-config=/home/rtonukun/secrets.yaml 但在那之后,我的错误就降低了 The connection to the server 171.69.225.87:64
- --encryption-provider-config=/home/rtonukun/secrets.yaml
但在那之后,我的错误就降低了
The connection to the server 171.69.225.87:6443 was refused - did you specify the right host or port?
使用所有kubectl命令,如“kubectl get no”
梅尼,我该如何做以下两个步骤
3. Set the --encryption-provider-config flag on the kube-apiserver to point to the location of the config file.
4. Restart your API server.
我完全复制了你的场景,我将尝试解释如何修复它 复制相同的场景
/home/koopakiller/secrets.yaml
上创建加密文件:/etc/kubernetes/manifests/kube apiserver.yaml
,并设置--加密提供程序配置
标志:
- --encryption-provider-config=/home/koopakiller/encryption.yaml
保存文件并退出
当我检查pods状态时,得到了相同的错误:
$ kubectl get pods -A
The connection to the server 10.128.0.62:6443 was refused - did you specify the right host or port?
故障排除
由于kubectl不再工作,我尝试使用docker命令直接查看正在运行的容器,然后我看到kube apiserver容器最近被重新创建:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
54203ea95e39 k8s.gcr.io/pause:3.1 "/pause" 1 minutes ago Up 1 minutes k8s_POD_kube-apiserver-lab-1_kube-system_015d9709c9881516d6ecf861945f6a10_0
...
Kubernetes将创建的POD的日志存储在/var/log/pods
目录中,我检查了kube apiserver日志文件,发现了一个有价值的信息:
{“log”:“Error:Error opening encryption provider configuration file”/home/koopakiller/encryption.yaml:open/home/koopakiller/encryption.yaml:没有这样的文件或目录\n”,“stream”:“stderr”,“time”:“2020-01-22T13:28:46.772768108Z”}
解释
查看清单文件kube-apiserver.yaml
可以看到命令kube-apiserver
,它运行在容器中,因此他们需要将encryption.yaml
文件装入容器中
如果检查此文件中的volumeMounts
,您会发现默认情况下,容器中只装载了以下路径:
- /etc/ssl/certs
- /电子证书/核证机关证书
- /etc/kubernetes/pki
- /usr/local/share/ca证书
- /usr/share/ca证书
/home/koopakiller/encryption.yaml
实际上没有装入容器中
如何解决
我可以找到两种方法来解决这个问题:
1st-将加密文件复制到/etc/kubernetes/pki
(或上述任何路径),并更改/etc/kubernetes/kube-apiserver.yaml中的路径:
- --encryption-provider-config=/etc/kubernetes/encryption.yaml
...
- --encryption-provider-config=/etc/kubernetes/secret/encryption.yaml
...
volumeMounts:
- mountPath: /etc/kubernetes/secret
name: secret
readOnly: true
...
volumes:
- hostPath:
path: /etc/kubernetes/secret
type: DirectoryOrCreate
name: secret
...
保存文件并等待服务器重新启动
2nd-在kube-apiserver.yaml清单中创建一个新的volumeMounts
,以将自定义目录从节点装载到容器中
让我们在/etc/kubernetes/secret
中创建一个新目录(主文件夹不是保留配置文件=)的好位置)
编辑/etc/kubernetes/manifests/kube-apiserver.yaml
:
- --encryption-provider-config=/etc/kubernetes/encryption.yaml
...
- --encryption-provider-config=/etc/kubernetes/secret/encryption.yaml
...
volumeMounts:
- mountPath: /etc/kubernetes/secret
name: secret
readOnly: true
...
volumes:
- hostPath:
path: /etc/kubernetes/secret
type: DirectoryOrCreate
name: secret
...
保存文件后,kubernetes会将节点路径/etc/kubernetes/secret
装入apiserver容器的同一路径中,完全等待启动,然后再次尝试列出节点
如果有帮助,请告诉我 正在尝试在新群集或以前创建的群集上应用此配置?以前创建的群集感谢您的ans。完成所有这些更改后,应正确加密机密。在运行这个cmd ETCDCTL_API=3 ETCDCTL--cacert=/etc/kubernetes/pki/etcd/ca.crt--cert=/etc/kubernetes/pki/etcd/server.crt--key=/etc/kubernetes/pki/etcd/server.key-get/registry/secret1后,我可以看到秘密的纯文本值标识:{}最后应该保留。我把它放在钥匙上方。