[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
```
- 前言
- 架構
- 部署
- kubeadm部署
- kubeadm擴容節點
- 二進制安裝基礎組件
- 添加master節點
- 添加工作節點
- 選裝插件安裝
- Kubernetes使用
- k8s與dockerfile啟動參數
- hostPort與hostNetwork異同
- 應用上下線最佳實踐
- 進入容器命名空間
- 主機與pod之間拷貝
- events排序問題
- k8s會話保持
- 容器root特權
- CNI插件
- calico
- calicoctl安裝
- calico網絡通信
- calico更改pod地址范圍
- 新增節點網卡名不一致
- 修改calico模式
- calico數據存儲遷移
- 啟用 kubectl 來管理 Calico
- calico卸載
- cilium
- cilium架構
- cilium/hubble安裝
- cilium網絡路由
- IP地址管理(IPAM)
- Cilium替換KubeProxy
- NodePort運行DSR模式
- IP地址偽裝
- ingress使用
- nginx-ingress
- ingress安裝
- ingress高可用
- helm方式安裝
- 基本使用
- Rewrite配置
- tls安全路由
- ingress發布管理
- 代理k8s集群外的web應用
- ingress自定義日志
- ingress記錄真實IP地址
- 自定義參數
- traefik-ingress
- traefik名詞概念
- traefik安裝
- traefik初次使用
- traefik路由(IngressRoute)
- traefik中間件(middlewares)
- traefik記錄真實IP地址
- cert-manager
- 安裝教程
- 頒布者CA
- 創建證書
- 外部存儲
- 對接NFS
- 對接ceph-rbd
- 對接cephfs
- 監控平臺
- Prometheus
- Prometheus安裝
- grafana安裝
- Prometheus配置文件
- node_exporter安裝
- kube-state-metrics安裝
- Prometheus黑盒監控
- Prometheus告警
- grafana儀表盤設置
- 常用監控配置文件
- thanos
- Prometheus
- Sidecar組件
- Store Gateway組件
- Querier組件
- Compactor組件
- Prometheus監控項
- grafana
- Querier對接grafana
- alertmanager
- Prometheus對接alertmanager
- 日志中心
- filebeat安裝
- kafka安裝
- logstash安裝
- elasticsearch安裝
- elasticsearch索引生命周期管理
- kibana安裝
- event事件收集
- 資源預留
- 節點資源預留
- imagefs與nodefs驗證
- 資源預留 vs 驅逐 vs OOM
- scheduler調度原理
- Helm
- Helm安裝
- Helm基本使用
- 安全
- apiserver審計日志
- RBAC鑒權
- namespace資源限制
- 加密Secret數據
- 服務網格
- 備份恢復
- Velero安裝
- 備份與恢復
- 常用維護操作
- container runtime
- 拉取私有倉庫鏡像配置
- 拉取公網鏡像加速配置
- runtime網絡代理
- overlay2目錄占用過大
- 更改Docker的數據目錄
- Harbor
- 重置Harbor密碼
- 問題處理
- 關閉或開啟Harbor的認證
- 固定harbor的IP地址范圍
- ETCD
- ETCD擴縮容
- ETCD常用命令
- ETCD數據空間壓縮清理
- ingress
- ingress-nginx header配置
- kubernetes
- 驗證yaml合法性
- 切換KubeProxy模式
- 容器解析域名
- 刪除節點
- 修改鏡像倉庫
- 修改node名稱
- 升級k8s集群
- 切換容器運行時
- apiserver接口
- 其他
- 升級內核
- k8s組件性能分析
- ETCD
- calico
- calico健康檢查失敗
- Harbor
- harbor同步失敗
- Kubernetes
- 資源Terminating狀態
- 啟動容器報錯