首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windows上运行calicoctl会导致错误:创建Calico API客户端失败:配置无效:未提供配置

在Windows上运行calicoctl会导致错误:创建Calico API客户端失败:配置无效:未提供配置
EN

Stack Overflow用户
提问于 2021-04-27 21:44:49
回答 2查看 1.7K关注 0票数 0

我将k3d与calico一起使用,并试图使用calicoctl设置网络策略。我可以让它在Ubuntu上工作,但在Windows上却不能。

代码语言:javascript
复制
# 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"

然后,当我尝试使用NetWorkPolicy应用calicoctl apply -f my-policy.yaml时,我得到了错误:

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

所以我试着用Kubeconfig的值来设置它:

代码语言:javascript
复制
# 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"”)

于是,我尝试了以下所有的方法,但没有一种有效:

代码语言:javascript
复制
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集群?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-28 01:23:17

而官方的文档声称:

  1. Calico在默认用户位置~/.kube/config中查找配置
  2. 它还将查看KUBERNETES_MASTER (错误输出声明如下)
  3. 它还将研究KUBECONFIG

不是的!上述任何一项都不适用于Windows。(在Ubuntu上,我不需要做任何特别的事情,它找到了我的配置)

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

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

calico.cfg.yaml

代码语言:javascript
复制
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
  datastoreType: "kubernetes"
  kubeconfig: "C:/users/myusername/.kube/config"

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

现在调用它需要:

代码语言:javascript
复制
# NOTICE THE "--config=calico.cfg.yaml"
calicoctl apply -f some-policy.yaml --config=calico.cfg.yaml

我认为,从配置文件正常工作但使用"~/.kube/config"作为kubeconfig路径时抛出一个错误来判断,正在查找“默认”路径,但使用的是不理解~别名的Windows。

票数 1
EN

Stack Overflow用户

发布于 2022-03-03 11:57:10

我尝试了上面提到的三种选择,我发现第三种选择对我有效。

以下是我遵循的步骤:

  1. 定义环境变量KUBECONFIG:
代码语言:javascript
复制
$env:KUBECONFIG="C:\Users\myusername\.kube\config"
  1. 打电话给calicoctl。例:
代码语言:javascript
复制
calicoctl get ippools

注意:我使用calicoctl版本v3.22.0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67291087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档