从kubeadm init生成的服务器内存中保存连接命令

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

我想管理服务器并使用ansible配置它们。用kubeadm创建连接命令后,我要将命令保存在控制器计算机的RAM中。而且,出于我的工作目的,将秘密连接命令本地保存在控制器机器上是有问题的。对于某些问题,我无法使用Ansible Vault。有什么方法可以保存连接命令并将其传递给工作节点,而无需在控制器计算机上本地保存?只要我可以将较新的节点加入集群,就可以使用短暂的令牌。

任何不涉及将连接命令或令牌保存到本地存储并且新节点可以在很长一段时间后加入的安全方式,对我来说都是有效的。

kubernetes ansible kubeadm secret-key kubernetes-secrets
1个回答
0
投票

我正在创建具有ansible的小型集群,并且也存在此问题。

[我的第一个解决方案是将联接命令(How to grab last two lines from ansible (register stdout) initialization of kubernetes cluster)存储在ansible reg中,并将其写出到ansible服务器上的文件中,我称之为join-command。然后,在我的节点剧本中,将联接命令文件复制到该节点并执行它。这很痛苦,因为在将连接命令文件复制到ansible服务器之后,我必须更改其权限,以便我正在运行剧本的用户可以读取它...如果我将其用于第二个集群连接命令将更改,并且我将丢失旧的连接命令,并且无论如何无法将节点添加到先前的群集中。]

下面是我更喜欢的第二个解决方案。

我为我的节点创建了一个yml初始化文件,该文件包含在master上创建的长期令牌(不确定您的长期令牌是否存在问题)。因此,当我kubeadm初始化我的节点时,我首先在init文件中拥有一个可复制的副本,然后再对其进行初始化。

可摘录片段:

  - name: Create the kubernetes init yaml file for worker node
    template:
      src: kubeadminitworker.yml
      dest: /etc/kubernetes/kubeadminitworker.yaml

  - name: Join the node to cluster
    command: kubeadm join --config /etc/kubernetes/kubeadminitworker.yaml
    register: join_output
  - debug:
      var: join_output.stdout

kubeadmininitworker.yml:

apiVersion: kubeadm.k8s.io/v1beta2
caCertPath: /etc/kubernetes/pki/ca.crt
discovery:
  file:
    kubeConfigPath: /etc/kubernetes/discovery.yml
  timeout: 5m0s
  tlsBootstrapToken: <token string removed for post>
kind: JoinConfiguration
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  kubeletExtraArgs:
    cloud-provider: external

令牌字符串与主服务器上的字符串匹配的地方。

[在创建具有ansible的master时,我也使用了一个初始化文件,其中包括我的长期令牌。

供参考的主初始化:

apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
bootstrapTokens:
       - groups:
         - system:bootstrappers:kubeadm:default-node-token
         token: <token string removed for post>
         ttl: 0s
         usages:
         - signing
         - authentication
nodeRegistration:
  kubeletExtraArgs:
    cloud-provider: external
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
useHyperKubeImage: false
networking:
  serviceSubnet: "10.96.0.0/12"
  podSubnet: "172.16.0.0/16"
etcd:
  local:
    imageRepository: "k8s.gcr.io"
dns:
  type: "CoreDNS"
  imageRepository: "k8s.gcr.io"

我之前做了这件事-但我相信我只是在现有集群上运行了create token命令,将令牌字符串复制到了我的两个init文件中,然后从现有集群中删除了该令牌。到目前为止一切顺利...

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