[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状态
- 启动容器报错