GCE 连接上的 Kubernetes 集群拒绝错误

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

我正在尝试使用 Google Compute Engine、Terraform 和 Ansible 创建 k8s 集群。我通过 terraform 创建了三个虚拟机,并通过 Ansible 在其上安装了 docker 和 kubernetes。我想使用 Calico 作为网络插件。我每次在 6443 端口上都会收到连接拒绝错误。经过一番调试,我发现问题出在这部分。

 - name: Kubeadmin init - only master
  shell: |
    kubeadm init --service-cidr 10.96.0.0/12 --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address 0.0.0.0 
  when: 
    - ansible_facts['hostname'] == 'master'

- name: Copy kubeconfig
  shell: |
    mkdir -p /root/.kube
    cp  /etc/kubernetes/admin.conf /root/.kube/config
    chown $(id -u):$(id -g) /root/.kube/config
    kubeadm token create --print-join-command > /tmp/.token
  when: 
    - ansible_facts['hostname'] == 'master'

当我通过谷歌云平台连接到虚拟机并运行 kubectl getnodes 后,它给了我连接拒绝错误。然后我在谷歌云平台上用我自己的用户再次运行了这部分。

mkdir -p $HOME/.kube
sudo cp  /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后再次尝试 kubectl getnodes 它给我节点。那么我应该怎么做才能在ansible上解决这个问题我无法添加calico插件,因为这个错误我认为问题是由用户(root,我自己的用户)引起的?

kubernetes google-cloud-platform ansible google-compute-engine calico
1个回答
0
投票

使用 kubectl get 节点时,您遇到的连接拒绝错误可能是由 Ansible playbook 处理 kubeconfig 文件的方式引起的。

查看如何解决问题并使 calico 部署成为可能。

通过检查端口 6443 确保主节点的 Kubernetes API 服务器已启动并正常工作。这可以通过确认没有防火墙规则阻止连接并监控 kube-apiserver 服务的状态来完成。

出于安全考虑,通常不鼓励使用 root 功能运行 Ansible 作业。相反,创建一个用于 Kubernetes 管理的特殊用户并配置 Ansible 以使用该用户。

将 kubeconfig 复制到非 root 用户的主目录后,在 playbook 中。确保用户具有必要的权限,并利用文件模块的所有者和组选项来正确指定所有权和组。

更改 playbook 的 kubectl getnodes 任务以指向非 root 用户的 kubeconfig 目录。

在 Ansible Galaxy 上使用 Kubernetes CNI 提供程序的官方 calico,一旦为非 root 用户建立了功能性 kubeconfig,就可以部署 calico。

不要将 kubeconfig 直接粘贴到增强安全优势的 playbook 中,而是考虑将其存储为 Kubernetes 机密。使用 Ansible Vault 安全地处理私有数据,例如 Kubeadm 令牌

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