如何将加密提供者配置选项添加到kube-apiserver?

问题描述 投票:0回答:1

我正在使用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.
kubernetes kubeadm
1个回答
2
投票
我完全重现了您的情况,我将尽力解释如何解决它

再现相同场景

    /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
  • / etc / ca-certificates
  • / etc / kubernetes / pki
  • / usr / local / share / ca-certificates
  • / usr / share / ca-certificates
  • ... 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容器的同一路径中,等待完全启动,然后尝试再次列出您的节点。

    请让我们知道是否有帮助!

  • © www.soinside.com 2019 - 2024. All rights reserved.