RKE2 单节点集群安装 Rancher+ 私有镜像仓库搭建 完整教程

RKE2 单节点集群安装 Rancher 完整教程

本文档介绍如何在单节点上部署 RKE2 Kubernetes 集群,并安装带有自签名证书(自动续期)的 Rancher。

参考文档:Rancher 官方文档 - RKE2 安装


环境要求

项目 要求
操作系统 Rocky Linux 8/9、CentOS 7/8、Ubuntu 20.04+
网络 可访问外网或配置私有镜像仓库

一、系统初始化

在安装 RKE2 之前,需要对系统进行基础配置,以RHEL系 或 Red Hat系为例。

bash 复制代码
#!/bin/bash
#!/bin/bash
echo "开始服务器初始化 (Rocky/CentOS 版本)..."
​
yum update -y
​
# 检查是否为 root 用户
if [ "$(id -u)" -ne 0 ]; then
  echo "请使用 root 用户运行此脚本。"
  exit 1
fi
​
# 1 修改 /etc/hostname
echo "请输入新的主机名 (hostname):"
read NEW_HOSTNAME
if [ -z "$NEW_HOSTNAME" ]; then
  echo "主机名不能为空。"
  exit 1
fi
​
echo "设置主机名为: $NEW_HOSTNAME"
hostnamectl set-hostname "$NEW_HOSTNAME"
​
# 2 关闭防火墙
echo "关闭防火墙..."
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld --no-pager
​
# 3 关闭 SELinux
echo "关闭 SELinux..."
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
​
# 4 禁用内存交换
echo "禁用内存交换 (swap)..."
sed -i '/ swap /s/^/#/' /etc/fstab
swapoff -a
​
echo "当前内存状态:"
free -h
​
# 5 转发 IPv4 并让 iptables 看到桥接流量
echo "设置 IPv4 转发和桥接流量配置..."
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
​
modprobe overlay
modprobe br_netfilter
​
cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
​
sysctl --system
​
echo "确认加载的内核模块:"
lsmod | grep br_netfilter
lsmod | grep overlay
​
echo "确认系统变量:"
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
​
echo "所有配置完成。建议重启系统以确保所有更改生效。"

二、镜像准备(私有仓库/离线环境)

⚠️ 如果服务器可以直接访问外网,可以跳过本章节。

2.1 确定 RKE2 版本

在同步镜像之前,先确认要安装的 RKE2 版本:

bash 复制代码
# 方法一:查询 GitHub 发布的版本(推荐)
curl -s -o /dev/null -w "%{url_effective}\n" -L "https://update.rke2.io/v1-release/channels/stable" | sed 's|.*/||'
​
# 示例输出:
#   v1.34.3+rke2r1
#   这表示会安装 1.34.x 系列的最稳定版本

2.2 获取镜像列表

bash 复制代码
# 设置版本(根据上一步确定的版本)
RKE2_VERSION="v1.34.3+rke2r1"
​
# 下载镜像列表
# 注意:URL 中的 + 需要编码为 %2B
curl -LO "https://github.com/rancher/rke2/releases/download/${RKE2_VERSION/+/%2B}/rke2-images-all.linux-amd64.txt"
​
# 查看镜像列表
cat rke2-images-all.linux-amd64.txt 

2.3 方式一:同步镜像到私有仓库

能访问外网的机器上执行镜像同步:

bash 复制代码
#!/bin/bash
# sync-rke2-images.sh
# 将 RKE2 镜像同步到私有仓库
​
set -e
​
# ==================== 配置 ====================
RKE2_VERSION="v1.34.3+rke2r1"
PRIVATE_REGISTRY="<your repository>"    # 你的私有仓库地址
# =============================================
​
# 如果使用代理,排除私有仓库地址
export no_proxy="localhost,127.0.0.1,${PRIVATE_REGISTRY%:*}"
export NO_PROXY="${no_proxy}"
​
# 下载镜像列表
IMAGES_FILE="rke2-images-all.linux-amd64.txt"
if [ ! -f "${IMAGES_FILE}" ]; then
    echo "下载镜像列表..."
    curl -LO "https://github.com/rancher/rke2/releases/download/${RKE2_VERSION/+/%2B}/${IMAGES_FILE}"
fi
​
# 统计
TOTAL=$(grep -v '^$' "${IMAGES_FILE}" | wc -l)
COUNT=0
​
echo "=========================================="
echo "开始同步 ${TOTAL} 个镜像到 ${PRIVATE_REGISTRY}"
echo "=========================================="
​
# 同步镜像
while IFS= read -r image; do
    [ -z "$image" ] && continue
    COUNT=$((COUNT + 1))
    
    # 提取镜像名(去掉 docker.io/ 前缀)
    image_name="${image#docker.io/}"
    target="${PRIVATE_REGISTRY}/${image_name}"
    
    echo ""
    echo "[${COUNT}/${TOTAL}] ${image_name}"
    
    # 拉取
    echo "  拉取中..."
    docker pull "${image}" || { echo "  ❌ 拉取失败"; continue; }
    
    # 标记
    docker tag "${image}" "${target}"
    
    # 推送
    echo "  推送中..."
    docker push "${target}" || { echo "  ❌ 推送失败"; continue; }
    
    echo "  ✅ 完成"
    
done < "${IMAGES_FILE}"
​
echo ""
echo "=========================================="
echo "✅ 同步完成!共 ${COUNT} 个镜像"
echo "=========================================="

注意事项:

  1. Docker 需要配置 insecure-registries(如果私有仓库是 HTTP):
bash 复制代码
# /etc/docker/daemon.json
{
  "insecure-registries": ["<your repository>"]
}
# 然后重启 Docker: systemctl restart docker
  1. 如果使用代理,需要排除私有仓库地址(见脚本中的 no_proxy 配置)

2.4 方式二:离线安装(下载镜像包)

如果无法同步镜像到私有仓库,可以下载官方离线镜像包:

bash 复制代码
# 设置版本
RKE2_VERSION="v1.34.3+rke2r1"
​
# 在能访问外网的机器上下载镜像包(约 800MB-1GB)
curl -LO "https://github.com/rancher/rke2/releases/download/${RKE2_VERSION/+/%2B}/rke2-images.linux-amd64.tar.zst"
​
# 也可以下载所有镜像(包含 CNI 等,约 1.5GB)
# curl -LO "https://github.com/rancher/rke2/releases/download/${RKE2_VERSION/+/%2B}/rke2-images-all.linux-amd64.tar.zst"

将下载的文件传输到目标服务器后:

bash 复制代码
# 在目标服务器上,将镜像包放到指定目录
mkdir -p /var/lib/rancher/rke2/agent/images/
​
# 复制镜像包(RKE2 启动时会自动加载)
cp rke2-images.linux-amd64.tar.zst /var/lib/rancher/rke2/agent/images/
​
# 如果使用了数据盘符号链接
# cp rke2-images.linux-amd64.tar.zst /data/rancher/rke2/agent/images/

2.5 同时同步 cert-manager 和 Rancher 镜像

除了 RKE2 系统镜像,还需要同步 cert-manager 和 Rancher 镜像:

bash 复制代码
# cert-manager 镜像(v1.18.2)
quay.io/jetstack/cert-manager-controller:v1.18.2
quay.io/jetstack/cert-manager-webhook:v1.18.2
quay.io/jetstack/cert-manager-cainjector:v1.18.2
quay.io/jetstack/cert-manager-startupapicheck:v1.18.2
​
# Rancher 镜像(v2.13.1)
docker.io/rancher/rancher:v2.13.1
docker.io/rancher/rancher-webhook:v0.6.3
docker.io/rancher/shell:v0.3.2
docker.io/rancher/fleet-agent:v0.11.4
# ... 更多镜像见 Rancher 官方文档

同步脚本示例:

bash 复制代码
#!/bin/bash
# 同步 cert-manager 镜像
PRIVATE_REGISTRY="<your repository>"
CERT_MANAGER_VERSION="v1.18.2"
​
IMAGES=(
    "quay.io/jetstack/cert-manager-controller:${CERT_MANAGER_VERSION}"
    "quay.io/jetstack/cert-manager-webhook:${CERT_MANAGER_VERSION}"
    "quay.io/jetstack/cert-manager-cainjector:${CERT_MANAGER_VERSION}"
    "quay.io/jetstack/cert-manager-startupapicheck:${CERT_MANAGER_VERSION}"
)
​
for image in "${IMAGES[@]}"; do
    # 提取仓库路径(去掉域名前缀)
    image_path="${image#*/}"
    target="${PRIVATE_REGISTRY}/${image_path}"
    
    echo "处理: ${image}"
    docker pull "${image}"
    docker tag "${image}" "${target}"
    docker push "${target}"
    echo "完成: ${target}"
done

三、安装 RKE2 单节点集群

3.1 配置数据存储目录(重要)

RKE2 默认将数据存储在 /var/lib/rancher/rke2,包括:

  • containerd 镜像和容器数据
  • etcd 数据
  • 日志文件

如果你的数据盘挂载在 /data,建议将数据存储到数据盘:

bash 复制代码
# 创建 /var/lib/rancher 目录
mkdir -p /var/lib/rancher
​
# 确保数据目录 /data/rancher 已经存在(自己的数据盘)
mkdir -p /data/rancher
​
#Bind mount 数据盘到 /var/lib/rancher
mount --bind /data/rancher /var/lib/rancher
#固化到 fstab(保证重启后依旧生效):
echo "/data/rancher /var/lib/rancher none bind 0 0" >> /etc/fstab
​
#验证挂载是否生效
mount | grep '/var/lib/rancher'
stat /var/lib/rancher /data/rancher
df -h /var/lib/rancher /data/rancher

挂载成功你应该看到:

  • /var/lib/rancher 是目录
  • 底层设备和 /data/rancher 一致
  • 不会双倍占用磁盘
  • 例如:
  • 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/rlm-data 321G 12G 309G 4% /var/lib/rancher /dev/mapper/rlm-data 321G 12G 309G 4% /data

3.2 创建 RKE2 配置文件

perl 复制代码
# 创建配置目录
mkdir -p /etc/rancher/rke2/
​
# 获取本机 IP(根据实际情况修改)
NODE_IP="10.283.9.135"
​
# 生成随机 Token(用于节点认证)
# 单节点可随意设置,多节点集群需所有节点使用相同 token
RKE2_TOKEN=$(openssl rand -hex 16)
echo "生成的 Token: ${RKE2_TOKEN}"
​
# 创建配置文件
cat > /etc/rancher/rke2/config.yaml <<EOF
# Token: 用于节点认证
# - 单节点:可随意设置或省略(RKE2 会自动生成)
# - 多节点:所有节点必须使用相同的 token
token: ${RKE2_TOKEN}
​
# TLS SAN 配置(重要:避免证书错误)
tls-san:
  - ${NODE_IP}
  - ${NODE_IP}.sslip.io
  - localhost
  - 127.0.0.1
​
# 禁用不需要的组件(可选)
# disable:
#   - rke2-ingress-nginx  # 如果要自己安装 ingress-nginx 可以禁用
​
# 单节点模式下的 etcd 快照配置
etcd-snapshot-schedule-cron: "0 */6 * * *"
etcd-snapshot-retention: 5
EOF

3.3 配置私有镜像仓库(可选)

如果你有私有镜像仓库,可以配置 RKE2 使用它:

yaml 复制代码
# 创建 registries 配置文件
cat > /etc/rancher/rke2/registries.yaml <<'EOF'
mirrors:
  # Docker Hub 镜像加速
  docker.io:
    endpoint:
      - "https://你的私有仓库地址"
  # 如果私有仓库同步了 RKE2 系统镜像
  # registry.k8s.io:
  #   endpoint:
  #     - "https://你的私有仓库地址"
​
# 私有仓库认证配置(如需要)
configs:
  "你的私有仓库地址":
    auth:
      username: 你的用户名
      password: 你的密码
    # 如果是自签名证书
    # tls:
    #   insecure_skip_verify: true
EOF

示例(使用你的私有仓库):

yaml 复制代码
cat > /etc/rancher/rke2/registries.yaml <<'EOF'
mirrors:
  docker.io:
    endpoint:
      - "http://<your repository>"
  quay.io:
    endpoint:
      - "http://<your repository>"
  registry.k8s.io:
    endpoint:
      - "http://<your repository>"
  ghcr.io:
    endpoint:
      - "http://<your repository>"
  # 重要:私有仓库自身也需要配置(防止直接访问时用 HTTPS)
  "<your repository>":
    endpoint:
      - "http://<your repository>"
​
configs:
  "<your repository>":
    auth:
      username: admin
      password: cquissE1
EOF

3.4 安装并启动 RKE2

ini 复制代码
# 设置 RKE2 版本(必须是上面查询到的可用版本)
RKE2_VERSION="v1.34.3+rke2r1"
​
# 使用国内镜像安装(推荐)
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | \
  INSTALL_RKE2_MIRROR=cn \
  INSTALL_RKE2_VERSION="${RKE2_VERSION}" \
  sh -
​
# 如果需要使用官方源(需要外网访问,版本更新更快)
# curl -sfL https://get.rke2.io | INSTALL_RKE2_VERSION="${RKE2_VERSION}" sh -
​
# 启用并启动 RKE2 服务
systemctl enable rke2-server.service
systemctl start rke2-server.service
​
# 查看启动日志(首次启动需要等待几分钟)
journalctl -u rke2-server -f

使用 crictl + ctr 排查启动过程(在 kubectl 配置之前即可使用):

bash 复制代码
# 配置 crictl(RKE2 使用的 containerd socket 路径不同)
cat > /etc/crictl.yaml <<'EOF'
runtime-endpoint: unix:///run/k3s/containerd/containerd.sock
image-endpoint: unix:///run/k3s/containerd/containerd.sock
timeout: 300
EOF
​
# 查看 Pod 状态(无需 kubectl 即可排查)
crictl pods
​
# 查看已拉取的镜像
crictl images
​
# 查看容器状态
crictl ps -a
​
# 查看容器日志
crictl logs <container_id>

预期 Pod 状态(核心组件启动顺序):

bash 复制代码
etcd-k8s-rancher                    Ready   # 1. 首先启动
kube-apiserver-k8s-rancher          Ready   # 2. API Server
kube-controller-manager-k8s-rancher Ready   # 3. Controller
kube-scheduler-k8s-rancher          Ready   # 4. Scheduler
kube-proxy-k8s-rancher              Ready   # 5. Proxy
cloud-controller-manager-k8s-rancher Ready  # 6. Cloud Controller
helm-install-rke2-canal-xxx         Ready   # 7. Helm 安装作业
helm-install-rke2-coredns-xxx       Ready   # 8. Helm 安装作业
# 配置 ctr (ctr主要用于无法拉取镜像的时候导入离线镜像包)
# 添加到 bashrc
cat >> ~/.bashrc <<'EOF'
​
# RKE2 ctr alias
alias ctr='ctr -a /run/k3s/containerd/containerd.sock'
EOF
# 立即生效
source ~/.bashrc
# 查看镜像
ctr -n k8s.io images ls | grep fleet
​
# 导出镜像
ctr -n k8s.io images export /tmp/fleet.tar <your repository>/rancher/fleet:v0.14.1
​
# 使用 ctr 导入 Docker 导出的 tar
ctr -n k8s.io images import /tmp/fleet-v0.14.1.tar
​

3.5 配置 kubectl

bash 复制代码
# 配置环境变量
echo 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml' >> ~/.bashrc
echo 'export PATH=$PATH:/var/lib/rancher/rke2/bin' >> ~/.bashrc
source ~/.bashrc
​
# 验证 kubectl
kubectl get nodes

3.6 验证集群状态

bash 复制代码
# 检查节点状态
kubectl get nodes
​
# 检查所有 Pod 状态
kubectl get pods -A
​
# 等待所有 Pod 就绪(可能需要 3-5 分钟)
watch kubectl get pods -A
​
# 预期输出:所有 Pod 应为 Running 或 Completed 状态
#命令补全
apt install -y bash-completion && yum install -y bash-completion
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

四、安装 cert-manager(证书自动管理)

cert-manager 用于自动签发和续期证书。

4.1 创建命名空间

arduino 复制代码
kubectl create namespace cert-manager || true

4.2 下载并安装 cert-manager

bash 复制代码
# 下载官方清单
curl -fsSL -o cert-manager.yaml \
  https://github.com/cert-manager/cert-manager/releases/download/v1.18.2/cert-manager.yaml
​
# (可选)替换为私有镜像仓库
# sed -i -E "s#quay.io/jetstack#<your repository>/common/jetstack#g" cert-manager.yaml
​
# 应用
kubectl apply -f cert-manager.yaml
​
# 等待组件就绪
kubectl -n cert-manager rollout status deploy/cert-manager --timeout=300s
kubectl -n cert-manager rollout status deploy/cert-manager-webhook --timeout=300s
kubectl -n cert-manager rollout status deploy/cert-manager-cainjector --timeout=300s
​
# 验证 Pod 状态
kubectl -n cert-manager get pods

五、配置自签名 CA 证书

5.1 生成根 CA 证书

bash 复制代码
# 创建工作目录
mkdir -p /root/rancher-certs && cd /root/rancher-certs
​
# 生成 CA 私钥
openssl genrsa -out ca.key 4096
​
# 生成 CA 证书(有效期 10 年)
openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 \
  -subj "/CN=rancher-local-ca/O=Rancher" -out ca.crt
​
# 验证证书
openssl x509 -in ca.crt -text -noout | head -20

5.2 将 CA 证书导入 cert-manager

ini 复制代码
# 创建 TLS Secret(供 ClusterIssuer 使用)
kubectl -n cert-manager create secret tls ca-key-pair \
  --cert=ca.crt \
  --key=ca.key \
  --dry-run=client -o yaml | kubectl apply -f -

5.3 创建 ClusterIssuer

yaml 复制代码
cat > clusterissuer-local-ca.yaml <<'EOF'
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: local-ca
spec:
  ca:
    secretName: ca-key-pair
EOF
​
kubectl apply -f clusterissuer-local-ca.yaml
​
# 验证 ClusterIssuer 状态
kubectl get clusterissuer local-ca

六、安装 Ingress-NGINX Controller

RKE2 默认安装了 ingress-nginx,如果需要自定义安装可以按以下步骤操作。

6.1 检查是否已安装

csharp 复制代码
# 检查 RKE2 内置的 ingress-nginx
kubectl -n kube-system get pods | grep ingress
# 设置为默认 IngressClass
kubectl annotate ingressclass nginx ingressclass.kubernetes.io/is-default-class="true" --overwrite
# 如果已有 ingress-nginx 运行,可以跳过本节

6.2 (可选)手动安装 Ingress-NGINX

csharp 复制代码
# 下载 baremetal 清单
curl -fsSL -o ingress-nginx.yaml \
  https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.11.3/deploy/static/provider/baremetal/deploy.yaml
​
# (可选)替换为私有镜像仓库
# sed -i 's#registry.k8s.io/ingress-nginx/controller#<your repository>/common/ingress-nginx-controller#g' ingress-nginx.yaml
# sed -i 's#registry.k8s.io/ingress-nginx/kube-webhook-certgen#<your repository>/common/kube-webhook-certgen#g' ingress-nginx.yaml
​
# 应用
kubectl apply -f ingress-nginx.yaml
​
# 设置为默认 IngressClass
kubectl annotate ingressclass nginx ingressclass.kubernetes.io/is-default-class="true" --overwrite
​
# 验证
kubectl -n ingress-nginx get pods -o wide
kubectl -n ingress-nginx get ingressclass nginx -o yaml | grep -A5 annotations

七、创建 Rancher 命名空间和证书

7.1 创建命名空间

sql 复制代码
kubectl create namespace cattle-system || true

7.2 创建 CA 信任 Secret

ini 复制代码
cd /root/rancher-certs
​
# 创建 tls-ca secret(Rancher 需要信任 CA)
kubectl -n cattle-system create secret generic tls-ca \
  --from-file=cacerts.pem=ca.crt \
  --from-file=cacerts=ca.crt \
  --dry-run=client -o yaml | kubectl apply -f -

7.3 创建 Rancher TLS 证书(自动续期)

yaml 复制代码
# 设置你的节点 IP
NODE_IP="10.283.9.135"
​
cat > certificate-rancher.yaml <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: tls-rancher-ingress
  namespace: cattle-system
spec:
  secretName: tls-rancher-ingress
  # 证书有效期配置
  duration: 43800h    # 5 年
  renewBefore: 2160h  # 到期前 90 天自动续期
  commonName: "${NODE_IP}.sslip.io"
  dnsNames:
    - "${NODE_IP}.sslip.io"
  ipAddresses:
    - ${NODE_IP}
  issuerRef:
    name: local-ca
    kind: ClusterIssuer
EOF
​
kubectl apply -f certificate-rancher.yaml
​
# 等待证书签发
kubectl -n cattle-system get certificate tls-rancher-ingress -w
​
# 验证证书 Secret 已创建
kubectl -n cattle-system get secret tls-rancher-ingress

八、安装 Helm

bash 复制代码
# 下载 Helm
curl -LO https://get.helm.sh/helm-v3.15.4-linux-amd64.tar.gz
​
# 解压并安装
tar -zxvf helm-v3.15.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
chmod +x /usr/local/bin/helm
​
# 验证
helm version
​
# 清理
rm -rf linux-amd64 helm-v3.15.4-linux-amd64.tar.gz

九、安装 Rancher

9.1 添加 Helm 仓库

bash 复制代码
# 使用国内镜像仓库
helm repo add rancher-stable https://rancher-mirror.rancher.cn/server-charts/stable
​
# 或使用官方仓库
# helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
​
helm repo update

9.2 安装 Rancher

ini 复制代码
# 设置变量
NODE_IP="10.283.9.135"
RANCHER_HOSTNAME="${NODE_IP}.sslip.io"
RANCHER_VERSION="2.13.1"
BOOTSTRAP_PASSWORD='Derdrerb3lrH!'
​
# 安装 Rancher
helm install rancher rancher-stable/rancher \
  --namespace cattle-system \
  --set hostname=${RANCHER_HOSTNAME} \
  --set ingress.tls.source=secret \
  --set ingress.ingressClassName=nginx \
  --set privateCA=true \
  --set replicas=1 \
 --set rancherImage=<your repository>/rancher/rancher \
 --set rancherImageTag=v${RANCHER_VERSION} \
 --set systemDefaultRegistry=<your repository> \
  --set bootstrapPassword="${BOOTSTRAP_PASSWORD}" \
  --version ${RANCHER_VERSION}
​
# 如果使用私有镜像仓库,添加以下参数:
# --set rancherImage=<your repository>/rancher/rancher \
# --set rancherImageTag=v${RANCHER_VERSION} \
# --set systemDefaultRegistry=<your repository> \

9.3 等待 Rancher 就绪

perl 复制代码
# 等待 Rancher 部署完成
kubectl -n cattle-system rollout status deploy/rancher --timeout=600s
​
# 查看 Pod 状态
kubectl -n cattle-system get pods
​
# 查看 Ingress 状态
kubectl -n cattle-system get ingress

十、访问 Rancher

10.1 获取访问地址

bash 复制代码
NODE_IP="10.283.9.135"
echo "Rancher 访问地址: https://${NODE_IP}.sslip.io"
echo "初始密码: BOOTSTRAP_PASSWORD"

待所有服务都启动完毕,就可以通过Rancher注册或安装集群了。

10.2 导入 CA 证书到客户端(可选)

由于使用自签名证书,浏览器会提示不安全。可以将 ca.crt 导入到操作系统或浏览器的信任证书中:

bash 复制代码
# 导出 CA 证书供客户端使用
cat /root/rancher-certs/ca.crt

Windows: 双击 ca.crt → 安装证书 → 本地计算机 → 受信任的根证书颁发机构

macOS: 双击 ca.crt → 添加到钥匙串 → 信任设置为始终信任


十一、证书自动续期验证

11.1 查看证书状态

sql 复制代码
# 查看证书详情
kubectl -n cattle-system describe certificate tls-rancher-ingress
​
# 查看证书事件
kubectl -n cattle-system get events --field-selector reason=Issuing

11.2 查看 cert-manager 日志

ini 复制代码
kubectl -n cert-manager logs -l app=cert-manager -f

11.3 手动触发证书续期(测试用)

perl 复制代码
# 删除证书 Secret,cert-manager 会自动重新签发
kubectl -n cattle-system delete secret tls-rancher-ingress
​
# 观察证书重新签发
kubectl -n cattle-system get certificate tls-rancher-ingress -w

十二、常见问题排查

12.1 RKE2 服务启动失败

bash 复制代码
# 查看日志
journalctl -u rke2-server -f
​
# 检查配置文件语法
cat /etc/rancher/rke2/config.yaml

12.2 cert-manager Webhook 超时

bash 复制代码
# 检查 webhook 服务
kubectl -n cert-manager get svc cert-manager-webhook
​
# 重启 cert-manager
kubectl -n cert-manager rollout restart deploy/cert-manager-webhook

12.3 Rancher Pod 无法启动

ini 复制代码
# 查看 Pod 日志
kubectl -n cattle-system logs -l app=rancher -f
​
# 查看 Pod 详情
kubectl -n cattle-system describe pod -l app=rancher

12.4 证书签发失败

perl 复制代码
# 检查 ClusterIssuer 状态
kubectl get clusterissuer local-ca -o yaml
​
# 检查 Certificate 状态
kubectl -n cattle-system describe certificate tls-rancher-ingress
​
# 查看 CertificateRequest
kubectl -n cattle-system get certificaterequest

十三、卸载指南

如需卸载,按以下顺序执行:

perl 复制代码
# 1. 卸载 Rancher
helm uninstall rancher -n cattle-system
​
# 2. 删除命名空间
kubectl delete namespace cattle-system
​
# 3. 卸载 cert-manager
kubectl delete -f cert-manager.yaml
​
# 4. 删除 cert-manager 命名空间
kubectl delete namespace cert-manager
​
# 5. 停止 RKE2
systemctl stop rke2-server
systemctl disable rke2-server
​
# 6. 卸载 RKE2
/usr/local/bin/rke2-uninstall.sh
相关推荐
阿里云云原生2 小时前
Dify 官方上架 Higress 插件,轻松接入 AI 网关访问模型服务
云原生
AI攻城狮4 小时前
OpenClaw Session 管理完全指南:Context 压缩、重置与持久化
人工智能·云原生·aigc
阿里云云原生4 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
阿里云云原生4 天前
MSE Nacos Prompt 管理:让 AI Agent 的核心配置真正可治理
微服务·云原生
阿里云云原生5 天前
当 AI Agent 接管手机:移动端如何进行观测
云原生·agent
阿里云云原生5 天前
AI 原生应用开源开发者沙龙·深圳站精彩回顾 & PPT下载
云原生
阿里云云原生5 天前
灵感启发:日产文章 100 篇,打造“实时热点洞察”引擎
云原生
~莫子5 天前
Haproxy七层负载详解+实验详细代码
云原生
阿里云云原生5 天前
OpenTelemetry + 云监控 2.0:打造你的云原生全栈可观测
云原生