【问题标题】:Running calicoctl on Windows results in error: Failed to create Calico API client: invalid configuration: no configuration has been provided在 Windows 上运行 calicoctl 导致错误:Failed to create Calico API client: invalid configuration: no configuration has been provided
【发布时间】:2021-07-21 06:29:12
【问题描述】:

我正在使用 k3d 和 calico,并尝试使用 calicoctl 设置网络策略。我可以在 Ubuntu 上运行它,但在 Windows 上却不行。为了设置它,我做了以下操作:

# Download Calico YAML
# DOWNLOAD: https://raw.githubusercontent.com/rancher/k3d/main/docs/usage/guides/calico.yaml

# Create k3d cluster
k3d cluster create "dev" --k3s-server-arg '--flannel-backend=none' --volume "$(pwd)/calico.yaml:/var/lib/rancher/k3s/server/manifests/calico.yaml

# Download Windows version
# DOWNLOAD: https://github.com/projectcalico/calicoctl/releases/download/v3.18.2/calicoctl-windows-amd64.exe 
 
# Make an Alias
Set-Alias -Name calicoctl -Value ".\calicoctl-windows-amd64.exe"

当我尝试运行 NetWorkPolicycalicoctl apply -f my-policy.yaml 时,我得到了错误:

创建 Calico API 客户端失败:配置无效:未提供配置,尝试设置 KUBERNETES_MASTER 环境变量

所以我尝试使用我的 Kubeconfig 的值进行设置:

# Get the IP/Port from Kubeconfig (Gives https://0.0.0.0:60776)
$kmaster=(kubectl config view -o jsonpath="{.clusters[?(@.name=='k3d-dev')].cluster.server}")

# Set the kubernetes master env variable from what's in kube config
[Environment]::SetEnvironmentVariable(“KUBERNETES_MASTER”, $kmaster, “User”)

这仍然给出了同样的错误。 (注意:来自 Kubeconfig 的 ip 是“https://0.0.0.0:60776”)

然后我尝试了以下所有方法,但它们都不起作用:

set KUBECONFIG=~/.kube/config
SET CALICO_KUBECONFIG=C:\Users\myname\.kube\config
SET KUBE_CONFIG_PATH=C:\Users\myname\.kube\config
$env:KUBERNETES_MASTER=(kubectl config view -o jsonpath="{.clusters[?(@.name=='k3d-dev')].cluster.server}")

如何让“calicoctl-windows-amd64.exe”找到我的 Kubernetes 集群?

【问题讨论】:

    标签: kubernetes kubectl project-calico kubeconfig calicoctl


    【解决方案1】:

    虽然官方documentation声称:

    1. Calico 在默认用户位置~/.kube/config 中查找配置
    2. 它还会查看KUBERNETES_MASTER (错误输出说明了这一点)
    3. 它还会查看KUBECONFIG

    它没有!以上均不适用于 Windows。 (在 Ubuntu 上,我不需要做任何特别的事情,它找到了我的配置)

    我找到的唯一解决方案是执行以下操作:

    1. 创建配置文件
    2. 在每个calicoctl 调用中传递配置文件

    calico.cfg.yaml

    apiVersion: projectcalico.org/v3
    kind: CalicoAPIConfig
    metadata:
    spec:
      datastoreType: "kubernetes"
      kubeconfig: "C:/users/myusername/.kube/config"
    

    注意:如果您传递“~/.kube/config”,它将失败并说它找不到该路径

    现在调用它需要:

    # NOTICE THE "--config=calico.cfg.yaml"
    calicoctl apply -f some-policy.yaml --config=calico.cfg.yaml
    

    认为,从配置文件工作但在使用"~/.kube/config" 作为kubeconfig 路径时抛出错误判断,它查看该“默认”路径,但使用的 Windows API 不理解 ~ 别名。

    【讨论】:

      猜你喜欢
      • 2022-12-02
      • 2017-08-14
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      相关资源
      最近更新 更多