部署 calicoctl

发布时间 2023-08-17 18:09:17作者: 小吉猫

calicoctl 与 kubectl

在以前的版本中,calicoctl需要管理projectcalico.org/v3 API组中的Calico API资源。calicoctl CLI工具提供了对这些API的重要验证和默认设置。

在较新的版本中,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

参考文档

https://docs.tigera.io/calico/latest/operations/calicoctl/install