Running calicoctl on Windows results in error: Failed to create Calico API client: invalid configuration: no configuration has been provided
Running calicoctl on Windows results in error: Failed to create Calico API client: invalid configuration: no configuration has been provided
我将 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"
然后当我尝试 运行 应用 NetWorkPolicy
和 calicoctl apply -f my-policy.yaml
时,我收到错误:
Failed to create Calico API client: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
所以我尝试使用我的 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")
然后我尝试了以下所有方法,其中 none 有效:
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 集群?
官方documentation声称:
- Calico 在默认用户位置查找配置
~/.kube/config
- 它还会查看
KUBERNETES_MASTER
(错误输出说明了这一点)
- 还会看
KUBECONFIG
事实并非如此! None 以上作品适用于 Windows。 (在 Ubuntu,我不需要做任何特别的事情,它找到了我的配置)
我找到的唯一解决方案是执行以下操作:
- 创建配置文件
- 在每个
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 路径时抛出错误,它 is 正在查看那个“默认”路径,但是使用的 Windows API 不理解 ~
别名。
我尝试了上面提到的三个选项,发现第三个选项适合我。
以下是我遵循的步骤:
- 定义环境变量KUBECONFIG:
$env:KUBECONFIG="C:\Users\myusername\.kube\config"
- 照常调用calicoctl。例如:
calicoctl get ippools
注意:我使用的是calicoctl v3.22.0版本
我将 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"
然后当我尝试 运行 应用 NetWorkPolicy
和 calicoctl apply -f my-policy.yaml
时,我收到错误:
Failed to create Calico API client: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable
所以我尝试使用我的 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")
然后我尝试了以下所有方法,其中 none 有效:
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 集群?
官方documentation声称:
- Calico 在默认用户位置查找配置
~/.kube/config
- 它还会查看
KUBERNETES_MASTER
(错误输出说明了这一点) - 还会看
KUBECONFIG
事实并非如此! None 以上作品适用于 Windows。 (在 Ubuntu,我不需要做任何特别的事情,它找到了我的配置)
我找到的唯一解决方案是执行以下操作:
- 创建配置文件
- 在每个
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 路径时抛出错误,它 is 正在查看那个“默认”路径,但是使用的 Windows API 不理解 ~
别名。
我尝试了上面提到的三个选项,发现第三个选项适合我。
以下是我遵循的步骤:
- 定义环境变量KUBECONFIG:
$env:KUBECONFIG="C:\Users\myusername\.kube\config"
- 照常调用calicoctl。例如:
calicoctl get ippools
注意:我使用的是calicoctl v3.22.0版本