部署 calicoctl v3.26.1
calicoctl 与 kubectl
在 Calico v3.20 以前的版本中,calicoctl需要管理projectcalico.org/v3 API组中的Calico API资源。calicoctl CLI工具提供了对这些API的重要验证和默认设置。
在 Calico v3.20+ 以后的版本中,Calico API服务器在服务器端执行默认和验证,公开相同的API语义,而不依赖于calicoctl。因此,我们建议安装Calico API服务器,并在大多数操作中使用kubectl而不是calicoctl。
calicoctl 以二进制文件运行
下载calicoctl
# curl -L https://github.com/projectcalico/calico/releases/latest/download/calicoctl-linux-amd64 -o calicoctl
添加执行权限
# chmod +x ./calicoctl
calicoctl 以kubectl 插件运行
下载calicoctl
# curl -L https://github.com/projectcalico/calico/releases/latest/download/calicoctl-linux-amd64 -o kubectl-calico
添加执行权限
# chmod +x ./calicoctl
验证插件
# kubectl calico -h
calicoctl 以pod方式运行
etcd
# kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calicoctl-etcd.yaml
Kubernetes API datastore
# kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calicoctl.yaml
验证calicoctl
# kubectl exec -ti -n kube-system calicoctl -- /calicoctl get profiles -o wide
NAME TAGS
kns.default kns.default
kns.kube-system kns.kube-system
配置 calicoctl 连接到 Kubernetes API 数据存储
默认配置
默认情况下,calicoctl将尝试使用位于$(HOME)/.kube/config的默认kubeconfig从Kubernetes API读取。
如果默认的kubeconfig不存在,或者您想指定替代的API访问信息,可以配置选项来指定。
连接 kubernetes API 配置选项
配置文件选项 | 环境变量 | 描述 | 模式 |
---|---|---|---|
datastoreType |
DATASTORE_TYPE |
指示要使用的数据存储。[默认值:kubernetes ] |
kubernetes ,etcdv3 |
kubeconfig |
KUBECONFIG |
使用 Kubernetes API数据存储时,要使用的 kubeconfig 文件的位置,例如 /path/to/kube/config。 | string |
k8sAPIEndpoint |
K8S_API_ENDPOINT |
Kubernetes API 的位置。如果使用 kubeconfig,则不需要。[默认值:https://kubernetes-api:443 ] |
string |
k8sCertFile |
K8S_CERT_FILE |
用于访问 Kubernetes API 的客户端证书的位置,例如/path/to/cert . |
string |
k8sKeyFile |
K8S_KEY_FILE |
用于访问 Kubernetes API 的客户端密钥的位置,例如/path/to/key . |
string |
k8sCAFile |
K8S_CA_FILE |
用于访问 Kubernetes API 的 CA 位置,例如/path/to/ca . |
string |
k8sToken |
用于访问 Kubernetes API 的令牌。 | string |
命令行方式连接
# DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config calicoctl get nodes
配置文件示例
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
datastoreType: 'kubernetes'
kubeconfig: '/path/to/.kube/config'
访问单个 kubernetes API
# export DATASTORE_TYPE=kubernetes
# export KUBECONFIG=~/.kube/config
# calicoctl get workloadendpoints
OR
# export CALICO_DATASTORE_TYPE=kubernetes
# export CALICO_KUBECONFIG=~/.kube/config
# calicoctl get workloadendpoints
访问指定 kubernetes API
# export DATASTORE_TYPE=kubernetes
# export KUBECONFIG=~/.kube/main:~/.kube/auxy
# calicoctl get --context main workloadendpoints
# calicoctl get --context auxy workloadendpoints
检测配置文件
正确的设置将生成已注册节点的列表。如果返回了一个空列表,那么您要么指向了错误的数据存储,要么没有注册任何节点。如果返回错误,请尝试更正该问题,然后重试。
# calicoctl get nodes
配置 calicoctl 连接到 etcd 数据存储
连接 etcd 配置选项
配置文件选项 | 环境变量 | 描述 | 模式 |
---|---|---|---|
datastoreType |
DATASTORE_TYPE |
指示要使用的数据存储。如果未指定,则默认为kubernetes . (选修的) |
kubernetes ,etcdv3 |
etcdEndpoints |
ETCD_ENDPOINTS |
以逗号分隔的 etcd 端点列表。示例:(http://127.0.0.1:2379,http://127.0.0.2:2379 必填) |
string |
etcdDiscoverySrv |
ETCD_DISCOVERY_SRV |
通过 SRV 记录发现 etcd 端点的域名。与 互斥etcdEndpoints 。示例:(example.com 可选) |
string |
etcdUsername |
ETCD_USERNAME |
RBAC 的用户名。示例:(user 可选) |
string |
etcdPassword |
ETCD_PASSWORD |
给定用户名的密码。示例:(password 可选) |
string |
etcdKeyFile |
ETCD_KEY_FILE |
包含与客户端证书匹配的私钥的文件的路径calicoctl 。允许calicoctl 参与双向 TLS 身份验证并向 etcd 服务器标识自身。示例:(/etc/calicoctl/key.pem 可选) |
string |
etcdCertFile |
ETCD_CERT_FILE |
包含颁发给 的客户端证书的文件的路径calicoctl 。允许calicoctl 参与双向 TLS 身份验证并向 etcd 服务器标识自身。示例:(/etc/calicoctl/cert.pem 可选) |
string |
etcdCACertFile |
ETCD_CA_CERT_FILE |
包含颁发 etcd 服务器证书的证书颁发机构 (CA) 根证书的文件的路径。配置calicoctl 信任签署根证书的 CA。该文件可能包含多个根证书,导致calicoctl 信任所包含的每个 CA。示例:(/etc/calicoctl/ca.pem 可选) |
string |
etcdKey |
与客户端证书匹配的私钥calicoctl 。允许calicoctl 参与双向 TLS 身份验证并向 etcd 服务器标识自身。(可选) |
string | |
etcdCert |
客户端证书颁发给calicoctl . 允许calicoctl 参与双向 TLS 身份验证并向 etcd 服务器标识自身。(可选) |
string | |
etcdCACert |
颁发 etcd 服务器证书的证书颁发机构 (CA) 的根证书。配置calicoctl 信任签署根证书的 CA。配置文件可能包含多个根证书,导致calicoctl 信任其中包含的每个 CA。(可选) |
string |
配置文件示例
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
etcdEndpoints: https://etcd1:2379,https://etcd2:2379,https://etcd3:2379
etcdKeyFile: /etc/calico/key.pem
etcdCertFile: /etc/calico/cert.pem
etcdCACertFile: /etc/calico/ca.pem
包含证书信息的配置示例
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
datastoreType: etcdv3
etcdEndpoints: 'https://127.0.0.1:2379'
etcdCACert: |
-----BEGIN CERTIFICATE-----
MIICKzCCAZSgAwIBAgIBAzANBgkqhkiG9w0BAQQFADA3MQswCQYDVQQGEwJVUzER
MA8GA1UEChMITmV0c2NhcGUxFTATBgNVBAsTDFN1cHJpeWEncyBDQTAeFw05NzEw
MTgwMTM2MjVaFw05OTEwMTgwMTM2MjVaMEgxCzAJBgNVBAYTAlVTMREwDwYDVQQK
EwhOZXRzY2FwZTENMAsGA1UECxMEUHViczEXMBUGA==
-----END CERTIFICATE-----
etcdCert: |
-----BEGIN CERTIFICATE-----
gI6iLXgMsp2EOlD56I6FA1jrCtNb01XQvX3eyFuA6g5T1jWGYBDtvQb0WRVkdUy9
L/uK+sHQwtloCSuakcQAsWV9bajCQtHX8XGu25Yz56kpJ/OJjcishxT6pc/sthum
A5PX739JsNUi/p5aG+H/6eNx+ukJP7QaM646YCfS5i8S9DJUvim+/BSlKi2ZiOCd
0MYH4Xb7lmAOTNmTvSYpKo9J2fZ9erw0MYSBTyjh6F7PRbHBiivgUnJfGQ==
-----END CERTIFICATE-----
etcdKey: |
-----BEGIN RSA PRIVATE KEY-----
k0dWj16h9P6TvfcNl2iwT4VIwx0uy2faWBED1DrCJcuQCy5nPrts2ZIaAWPi1t3t
VbDKQvs+KXBEeqh0qYcYkejUXqIF0uKUFLjiQmZssjpL5RHqqWuYKbO87n+Jod1L
TjGRHdbP0zF2U0LdjM17rc2hpJ3qrmgJ7pOLzbXMcOr+NP1ojRCArXhQ4iLs7D8T
eHw9QH4luJYtnmk7x03izLMQdLWcKnUbqh/xOVPyazgJHXwRxwNXpMsBVGY=
-----END RSA PRIVATE KEY-----
使用环境变量示例
# ETCD_ENDPOINTS=http://myhost1:2379 calicoctl get bgppeers
使用etcd DNS 发现示例
# ETCD_DISCOVERY_SRV=example.com calicoctl get nodes
使用 IPv6 示例
创建一个在IPv6 localhost[::1]上侦听的单节点etcd集群。
# etcd --listen-client-urls=http://[::1]:2379 --advertise-client-urls=http://[::1]:2379
使用etcd IPv6群集
# ETCD_ENDPOINTS=http://[::1]:2379 calicoctl get bgppeers
检测配置文件
正确的设置将生成已注册节点的列表。如果返回了一个空列表,那么您要么指向了错误的数据存储,要么没有注册任何节点。如果返回错误,请尝试更正该问题,然后重试。
# calicoctl get nodes
Calico API 列表
# kubectl api-resources | grep '\sprojectcalico.org'
bgpconfigurations bgpconfig,bgpconfigs projectcalico.org false BGPConfiguration
bgppeers projectcalico.org false BGPPeer
clusterinformations clusterinfo projectcalico.org false ClusterInformation
felixconfigurations felixconfig,felixconfigs projectcalico.org false FelixConfiguration
globalnetworkpolicies gnp,cgnp,calicoglobalnetworkpolicies projectcalico.org false GlobalNetworkPolicy
globalnetworksets projectcalico.org false GlobalNetworkSet
hostendpoints hep,heps projectcalico.org false HostEndpoint
ippools projectcalico.org false IPPool
kubecontrollersconfigurations projectcalico.org false KubeControllersConfiguration
networkpolicies cnp,caliconetworkpolicy,caliconetworkpolicies projectcalico.org true NetworkPolicy
networksets netsets projectcalico.org true NetworkSet
profiles projectcalico.org false Profile
calicoctl 常用命令
Usage:
calicoctl [options] <command> [<args>...]
create Create a resource by file, directory or stdin.
replace Replace a resource by file, directory or stdin.
apply Apply a resource by file, directory or stdin. This creates a resource
if it does not exist, and replaces a resource if it does exists.
patch Patch a pre-exisiting resource in place.
delete Delete a resource identified by file, directory, stdin or resource type and
name.
get Get a resource identified by file, directory, stdin or resource type and
name.
label Add or update labels of resources.
convert Convert config files between different API versions.
ipam IP address management.
node Calico node management.
version Display the version of calicoctl.
Options:
-h --help Show this screen.
-l --log-level=<level> Set the log level (one of panic, fatal, error,
warn, info, debug) [default: panic]
--context=<context> The name of the kubeconfig context to use.
--allow-version-mismatch Allow client and cluster versions mismatch.
Description:
The calicoctl command line tool is used to manage Calico network and security
policy, to view and manage endpoint configuration, and to manage a Calico
node instance.
See 'calicoctl <command> --help' to read about a specific subcommand.
参考文档
https://docs.tigera.io/calico/latest/operations/calicoctl/install