Kal*_*mar 4 kubernetes kubeadm
我正在使用 kubernetes 1.15.7 版本。
我正在尝试按照链接https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration启用 'encryption-provider-config' 选项'kube-apiserver'。
我编辑了文件“/etc/kubernetes/manifests/kube-apiserver.yaml”并提供了以下选项
- --encryption-provider-config=/home/rtonukun/secrets.yaml
Run Code Online (Sandbox Code Playgroud)
但在那之后我得到了以下错误。
The connection to the server 171.69.225.87:6443 was refused - did you specify the right host or port?
Run Code Online (Sandbox Code Playgroud)
使用所有 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.
Run Code Online (Sandbox Code Playgroud)
Mr.*_*ler 13
我已经完全复制了您的场景,我会尝试解释如何修复它
/home/koopakiller/secrets.yaml
:apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: r48bixfj02BvhhnVktmJJiuxmQZp6c0R60ZQBFE7558=
- identity: {}
Run Code Online (Sandbox Code Playgroud)
编辑文件/etc/kubernetes/manifests/kube-apiserver.yaml
并设置--encryption-provider-config
标志:
- --encryption-provider-config=/home/koopakiller/encryption.yaml
Run Code Online (Sandbox Code Playgroud)
保存文件并退出。
当我检查 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?
Run Code Online (Sandbox Code Playgroud)
由于 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
...
Run Code Online (Sandbox Code Playgroud)
Kubernetes 将创建的 pod 的日志存储在/var/log/pods
目录中,我检查了 kube-apiserver 日志文件并找到了有价值的信息:
{"log":"错误:打开加密提供程序配置文件时出错"/home/koopakiller/encryption.yaml": 打开/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/ca-证书
- /etc/kubernetes/pki
- /usr/local/share/ca-certificates
- /usr/share/ca-证书
...
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
...
Run Code Online (Sandbox Code Playgroud)
基于以上事实,我们可以假设 apiserver 未能启动,因为/home/koopakiller/encryption.yaml
实际上并未安装到容器中。
我可以看到两种方法来解决这个问题:
1st - 将加密文件复制到/etc/kubernetes/pki
(或上面的任何路径)并更改路径/etc/kubernetes/kube-apiserver.yaml
:
- --encryption-provider-config=/etc/kubernetes/encryption.yaml
Run Code Online (Sandbox Code Playgroud)
保存文件并等待 apiserver 重新启动。
2nd -volumeMounts
在 kube-apiserver.yaml 清单中创建一个新的,以将自定义目录从节点挂载到容器中。
让我们在/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
...
Run Code Online (Sandbox Code Playgroud)
保存文件后,kubernetes 会将节点路径挂载/etc/kubernetes/secret
到 apiserver 容器的相同路径中,等待完全启动并再次尝试列出您的节点。
如果有帮助,请告知!
归档时间: |
|
查看次数: |
1770 次 |
最近记录: |