部署 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

posted @ 2023-08-17 18:03  小吉猫  阅读(389)  评论(0编辑  收藏  举报