我正在使用kubernetes 1.15.7版本。
我正在尝试通过链接https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration在“ kube-apiserver”上启用“ encryption-provider-config”选项。
我编辑了文件'/etc/kubernetes/manifests/kube-apiserver.yaml',并在下面的选项中提供
- --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/rabello/secrets.yaml
上创建加密文件:apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: r48bixfj02BvhhnVktmJJiuxmQZp6c0R60ZQBFE7558=
- identity: {}
编辑文件/etc/kubernetes/manifests/kube-apiserver.yaml
并设置--encryption-provider-config
标志:
- --encryption-provider-config=/home/rabello/encryption.yaml
保存文件并退出。当我检查豆荚状态时出现相同的错误:
$ 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”:“错误:打开加密提供程序配置文件\” / home / rabello / encryption.yaml \“错误:打开说明/ home / rabello / encryption.yaml:没有这样的文件或目录 \ n “,” stream“:” stderr“,” time“:” 2020-01-22T13:28:46.772768108Z“}
看清单文件
kube-apiserver.yaml
可能会看到命令kube-apiserver
,它运行在容器中,因此他们需要将encryption.yaml
文件安装到容器中。如果检查此文件中的
volumeMounts
,则默认情况下会看到仅以下路径安装在容器中:/ etc / ssl / certs
...
volumeMounts:
- mountPath: /etc/ssl/certs
name: ca-certs
readOnly: true
- mountPath: /etc/ca-certificates
name: etc-ca-certificates
readOnly: true
- mountPath: /etc/kubernetes/pki
name: k8s-certs
readOnly: true
- mountPath: /usr/local/share/ca-certificates
name: usr-local-share-ca-certificates
readOnly: true
- mountPath: /usr/share/ca-certificates
name: usr-share-ca-certificates
readOnly: true
...
基于上述事实,我们可以假设apiserver无法启动,因为/home/rabello/encryption.yaml
实际上没有安装到容器中。如何解决
我可以看到2种解决此问题的方法:
1st-将加密文件复制到
/etc/kubernetes/pki
(或以上任何路径),然后更改/etc/kubernetes/kube-apiserver.yaml
中的路径:- --encryption-provider-config=/etc/kubernetes/encryption.yaml
保存文件并等待apiserver重新启动。2nd-在kube-apiserver.yaml清单中创建一个新的
让我们在volumeMounts
,以将自定义目录从节点装载到容器中。/etc/kubernetes/secret
中创建一个新目录(主文件夹不是放置配置文件的理想位置=))。编辑
/etc/kubernetes/manifests/kube-apiserver.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容器的同一路径中,等待完全启动,然后尝试再次列出您的节点。请让我们知道是否有帮助!