Kubernetes 如何将加密提供程序配置选项添加到kube apiserver?

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

我使用的是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: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证书
    基于以上事实,我们可以假设apiserver无法启动,因为
    /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后,我可以看到秘密的纯文本值标识:{}最后应该保留。我把它放在钥匙上方。