Calicoctl 在新安装的 k3s 上拒绝证书

Calicoctl 在新安装的 k3s 上拒绝证书

我全新安装了 Ubuntu,全新安装了 k3s,全新下载了 calicoctl。我按照以下方式安装。

curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644"\
        INSTALL_K3S_EXEC="--flannel-backend=none --cluster-cidr=192.168.0.0/16\
        --disable-network-policy --disable=traefik" sh -

kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml

curl -o calicoctl -O -L  "https://github.com/projectcalico/calicoctl/releases/download/v3.20.2/calicoctl"

当我运行 kubectl 时,一切正常。当我运行 calicoctl 时,出现证书错误。

# calicoctl apply -f V000_000-host-policy.yaml 
Unable to get Cluster Information to verify version mismatch: Get "https://127.0.0.1:6443/apis/crd.projectcalico.org/v1/clusterinformations/default": x509: certificate signed by unknown authority
Use --allow-version-mismatch to override.

我已将 和 证书从 复制request-header-ca.crtclient-ca.crt并将server-ca.crt它们/var/lib/rancher/k3s/server/tls应用于/usr/local/share/ca-certificatesupdate-ca-certificates我可以确认 中列出了这些证书/etc/ssl/certs/ca-certificates.crt

此外,我的~/.kube/config文件有以下内容(我定期重新安装,我希望这些都不是机密 - 如果我错了请纠正我)

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: LS0t...LS0K
    server: https://127.0.0.1:6443
  name: default
contexts:
- context:
    cluster: default
    user: default
  name: default
current-context: default
kind: Config
preferences: {}
users:
- name: default
  user:
    client-certificate-data: LS0t...LS0K
    client-key-data: LS0t...LQo=

我有以下配置/etc/cni/net.d/calico-kubeconfig

# Kubeconfig file for Calico CNI plugin. Installed by calico/node.
apiVersion: v1
kind: Config
clusters:
- name: local
  cluster:
    server: https://10.43.0.1:443
    certificate-authority-data: "LS0t...tLS0K"
users:
- name: calico
  user:
    token: eyJhb...tk4Q
contexts:
- name: calico-context
  context:
    cluster: local
    user: calico
current-context: calico-context

我已将 calico-kubeconfig 中的地址从 更改为10.43.0.1:443127.0.0.1:6443没有什么区别。

有人知道如何解决这个问题吗?我看到的证书错误是 CA 还是令牌导致的?对同一地址的 curl 也抱怨 CA,所以这让我认为这与令牌无关。

答案1

我有一个类似的设置(除了k3s在非特权 Ubuntu LXD 容器内运行)并k3s.service开始使用:

ExecStart=/usr/local/bin/k3s \
    server --snapshotter=native \
    --kubelet-arg=feature-gates=KubeletInUserNamespace=true \
    --kube-controller-manager-arg=feature-gates=KubeletInUserNamespace=true \
    --kube-apiserver-arg=feature-gates=KubeletInUserNamespace=true,RemoveSelfLink=false \
    --disable=servicelb --disable=traefik --flannel-backend=none --disable-network-policy \
    --cluster-cidr=192.168.0.0/16 --cluster-init

我不需要复制任何证书 - 只需:

ln -s /etc/rancher/k3s/k3s.yaml ~/.kube/config

在此处输入图片描述

答案2

通过将 calicoctl 日志级别设置为调试(例如calicoctl -l debug get nodes),我发现了发生了什么。

默认情况下,calicoctl 读取/etc/calico/calicoctl.cfg。如果您按照我的方式安装 calicoctl,则此文件将不存在。因此客户端将回退到使用~/.kube/config。其中包含一些信息,但不是全部信息。

作为调试日志信息的一部分,还显示了已加载的配置。我能够推断出配置属性与文档

我创建了以下/etc/calico/calicoctl.cfg文件(yaml 格式)

apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "/home/user/.kube/config"
  K8sAPIToken: "eyJh...xQHA"
  K8sCAFile: "/var/lib/rancher/k3s/server/tls/server-ca.crt"

我从哪里K8sAPIToken获取的/etc/cni/net.d/calico-kubeconfig。它应该与问题中的标记相同,我不确定它为什么会改变(刷新?)。无论哪种方式,上述方法都可以解决问题(至少是暂时的)。

相关内容