企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] 本次主题:在现有集群上安装 Calico API 服务器,以便使用 kubectl 管理 Calico API API 服务器为 Calico 提供 REST API,并允许使用 kubectl 管理 projectcalico.org/v3 API,而无需 calicoctl > 注意:从 Calico v3.20.0 开始,新的基于 operator 方式的 Calico 安装默认包含 API 服务器组件,因此不需要本文档中的说明。 # 前提条件 - 确保您有一个使用 Kubernetes API 数据存储安装了 Calico 的集群。 如果没有,您可以从 etcd 迁移。 - 使用适当的升级说明升级到 Calico v3.20+。 - 对于不是通过 `operator` 安装,您将需要一台安装了 openssl 的计算机 # 安装calico Apiserver ## 创建 Calico API 证书 ```shell openssl genrsa -out apiserver.key 2048 openssl req -new -key apiserver.key -out apiserver.csr -subj "/CN=calico-apiserver" echo "subjectAltName=DNS:calico-api.calico-apiserver.svc" > ./cert_extensions openssl x509 -req -in apiserver.csr -signkey apiserver.key -out apiserver.crt -days 3650 -extfile ./cert_extensions openssl x509 -noout -text -in apiserver.crt ``` ## 将证书提供 calico Apiserver 使用 ```shell kubectl create secret -n calico-apiserver generic calico-apiserver-certs --from-file=apiserver.key --from-file=apiserver.crt ``` ## 创建 calico APIserver ```shell curl -o /etc/kubernetes/addons/calico-apiserver.yaml https://projectcalico.docs.tigera.io/archive/v3.23/manifests/apiserver.yaml kubectl apply -f /etc/kubernetes/addons/calico-apiserver.yaml ``` ## 将证书绑定 calico Apiserver 服务 ```shell # calico apiserver容器启动成功的话,AVAILABLE字段会显示为True $ kubectl get apiservice v3.projectcalico.org NAME SERVICE AVAILABLE AGE v3.projectcalico.org calico-apiserver/calico-api True 11m kubectl patch apiservice v3.projectcalico.org -p \ "{\"spec\": {\"caBundle\": \"$(kubectl get secret -n calico-apiserver calico-apiserver-certs -o go-template='{{ index .data "apiserver.crt" }}')\"}}" ``` ## 检查API是否可用 ```shell $ kubectl api-resources | grep '\sprojectcalico.org' bgpconfigurations bgpconfig,bgpconfigs projectcalico.org/v3 false BGPConfiguration bgppeers projectcalico.org/v3 false BGPPeer caliconodestatuses caliconodestatus projectcalico.org/v3 false CalicoNodeStatus clusterinformations clusterinfo projectcalico.org/v3 false ClusterInformation felixconfigurations felixconfig,felixconfigs projectcalico.org/v3 false FelixConfiguration globalnetworkpolicies gnp,cgnp,calicoglobalnetworkpolicies projectcalico.org/v3 false GlobalNetworkPolicy globalnetworksets projectcalico.org/v3 false GlobalNetworkSet hostendpoints hep,heps projectcalico.org/v3 false HostEndpoint ippools projectcalico.org/v3 false IPPool ipreservations projectcalico.org/v3 false IPReservation kubecontrollersconfigurations projectcalico.org/v3 false KubeControllersConfiguration networkpolicies cnp,caliconetworkpolicy,caliconetworkpolicies projectcalico.org/v3 true NetworkPolicy networksets netsets projectcalico.org/v3 true NetworkSet profiles projectcalico.org/v3 false Profile $ kubectl get ippool -owide NAME CREATED AT default-ipv4-ippool 2024-03-01T02:15:47Z $ kubectl describe ippool default-ipv4-ippool Name: default-ipv4-ippool Namespace: Labels: <none> Annotations: <none> API Version: projectcalico.org/v3 Kind: IPPool Metadata: Creation Timestamp: 2024-03-01T02:15:47Z Resource Version: 314593 UID: df19c8a5-7cfd-405c-9058-ec092f3a6b79 Spec: Allowed Uses: Workload Tunnel Block Size: 26 Cidr: 172.26.0.0/16 Ipip Mode: Never Nat Outgoing: true Node Selector: all() Vxlan Mode: Never Events: <none> ``` >[danger] 注意:kubectl 可能会继续首选 crd.projectcalico.org API 组,因为它在本地缓存 API 的方式。 您可以通过删除集群的缓存目录来强制 kubectl 更新。 默认情况下,缓存位于 $(HOME)/.kube/cache 中。 # 卸载calico Apiserver ```shell kubectl delete -f /etc/kubernetes/addons/calico-apiserver.yaml ```