本文提供Rancher和Kuberentes快速安装的步骤和国内镜像仓库配置,并介绍Rancher单机原理,配置Keycloak提供SSO统一登录,并提供在线环境开放学习体验。
主要包含以下内容:
- 基于藏云阁镜像仓库快速部署Rancher和K8s集群
- Rancher 单机安装的原理
- 配置Keycloak提供SSO统一登录
- 免费开放的在线Rancher体验服务
Rancher是一个开源的企业级Kubernetes容器管理平台,它旨在简化容器的运营,满足企业在多云、混合云环境下的Kubernetes集群管理、安全管控、DevOps与应用交付等需求。
特别是对于中小企业,Rancher可以快速、轻松地部署Kubernetes集群,并管理容器应用,实现低成本高质量的云原生化业务基础设施建设。
基于市场报告显示,在云原生领域,即使在国产化背景下,Rancher任然是非常流行的容器云管理平台。
公众号发送【2024云报告】,获取完整的 《2024年中国基础云服务行业发展洞察报告》PDF 文档

1. 基于藏云阁镜像仓库快速部署Rancher 和 K8s 集群
国内用户使用 Rancher 最大痛点就是 Docker Hub 镜像仓库无法访问,无法拉取镜像。
官方在每个进行版本发布时会提供一个镜像列表,如 v2.12.3/rancher-images.txt 有 553 个镜像,并且提供提供对应的镜像收集导入导出的脚本工具,但这在实际使用时还是会带来很大的不便。

藏云阁镜像仓库同步了 v2.12.3 版本所有的镜像,其他版本也在同步中。
在进行安装部署时,通过添加 k8s-registries.yaml 配置来配置镜像仓库,并在容器启动时添加几个REGISTRY的环境变量,都指向 harbor.cncfstack.com 即可。
其中 k8s-registries.yaml 是部署 Kubernetes 集群时使用的镜像仓库,内容如下:
yaml
# cat config/k8s-registries.yaml
mirrors:
docker.io:
endpoint:
- "https://harbor.cncfstack.com"
官方提供的 docker run 的方式启动,我习惯使用 docker compose 来管理单机的容器,这样可以方便的管理相关配置。
启动的 docker-compose.yaml 文件如下:
yaml
services:
rancher:
image: harbor.cncfstack.com/rancher/rancher:v2.12.3
container_name: rancher
privileged: true
environment:
- CATTLE_SYSTEM_DEFAULT_REGISTRY=harbor.cncfstack.com
- CATTLE_SYSTEM_CATALOG=bundled
# 设置rancher管理平台页面中注册中心配置
- CATTLE_BASE_REGISTRY=harbor.cncfstack.com
- CATTLE_CLUSTER_REGISTRY=harbor.cncfstack.com
- CATTLE_BOOTSTRAP_PASSWORD=PASSWORD
# 第一次安装成功时让确认的的访问地址
- CATTLE_SERVER_URL=https://rancher.cncfstack.com
# 禁用虚拟化
- CATTLE_FEATURES=harvester=false
- CATTLE_DEV_MODE="yes"
ports:
- "80:80"
- "443:443"
restart: always
command: '--no-cacerts'
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- ./config/k8s-registries.yaml:/etc/rancher/k3s/registries.yaml
- /data/rancher/data:/var/lib/rancher
- /data/rancher/logs:/var/log/pods
- /YOUR/PATH/ssl/cncfstack.com_ecc/fullchain.cer:/etc/rancher/ssl/cert.pem
- /YOUR/PATH/ssl/cncfstack.com_ecc/cncfstack.com.key:/etc/rancher/ssl/key.pem
在使用这个 docker-compose.yaml 时除了需要先创建一个 /data/rancher 目录外,还需要修改以下配置项:
- CATTLE_BOOTSTRAP_PASSWORD:这个是部署时默认的admin登录密码,不配置时会自动生成一个
- YOUR/PATH:是存放证书的目录,需要替换为你的实际证书
关于免费证书申请可以参考文章:永久免费的HTTPS/TLS通配符域名合法证书申请很简单,不要再自签证书啦[最佳实践]
文件启动容器后,访问 https://rancher.cncfstack.com 根据提示进行相关配置。登录成功后会看到如下页面:

在环境中有一个默认的Kubernetes集群(基于K3s)可以满足基本学习使用,如果需要创建新的集群,可以点击【创建】按钮,添加新的集群。
2. Rancher 单机安装的原理
在上面步骤中使用 Docker 运行了单机的 Rancher 和 Kubernetes 集群,这在开发测试环境或者个人电脑上使用非常方便,但是生产环境强烈建议使用 HelmChart 的方式部署高可用的 Rancher 集群。
在宿主机上 docker ps 实际只能看到一个容器
bash
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f010bc232a1 harbor.cncfstack.com/rancher/rancher:v2.12.3 "entrypoint.sh --no-..." 6 days ago Up 6 days 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp rancher
只有1个容器是怎么运行一套完整的 Kuberentes 集群的呢?这就需要用到一种技术叫 DIND(docker-in-docker),可以参考这篇文章《容器嵌套,降本增效(Docker-in-Docker 三类解决方案)》
我们可以通过 Linux 命令 ps auxf 命令查看系统进程树结构,如下图

从图中可以看出最外层 moby 进程就是 docker ps 看到的 rancher 容器。
在 rancher 容器内运行了 tini 来作为主进程进行管理,然后运行了 k3s 来启动 Kubernetes 集群,k3s 内启动了etcd、kube-apiserver、kube-controller-manager、kube-scheduler等组件,所以在进程中只能看到一个 k3s server进程。然后启动了 CoreDNS等模块来运行完整的 Kubernetes 集群。
在集群中使用的是 Containerd 运行时,在 rancher 容器无法使用 docker 命令,但可以使用 ctr 命令来管理容器。
比如查看容器列表
bash
root@iv-ydsh9dfsdadsht8f2:~# docker exec -it rancher /bin/bash
bash-4.4# ctr container ls
CONTAINER IMAGE RUNTIME
01972be55ba87e0fd4752c3bf7a36f6badfff1f215ed8b743b8d516d575fc93f harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v2
02608d50bd8aa3a2c6c0bccca5f8aa2731a47dc27826e4613de963c472a2e1d6 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v2
07b75ae86f69d2c7c142ed8dd1e843056422d54ac44b835f241149ac2664c321 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
18e0efc634bff32f4a433106e32f0bd02b5b4658541f44b09e07c9a75c03def5 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v2
3578de9e0f96e88e6424f27ccde19a0c1959516d3b1ca92aa352a6f183c08133 harbor.cncfstack.com/rancher/rancher-agent:v2.12.3 io.containerd.runc.v2
3ffd9f6f1d16e5340d6ccdc1b596e82278b550ab6405152dcdc12b991e32ac02 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
4d6837a603d5a1f72910183bed354523960a7100d21230d0f93bb9c48838aea7 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v2
5c3825958f248e35f5e50d8b1f1fccaa2fc14730fddf971cd23bcc90fe8c63b8 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
60a137e496cff184e0d554138a9db1cc407d5833cc60ce96ea9f8f32a5d2aa6f harbor.cncfstack.com/rancher/rancher-agent:v2.12.3 io.containerd.runc.v2
7b2bac750c92fd94055b0630a39dbd820bafac8286be1a3b15bc04094a758aad harbor.cncfstack.com/rancher/rancher-agent:v2.12.3 io.containerd.runc.v2
7e2f4335906641bdb6b902af75106dd502b1784d4624543780c4b048a02c96e8 harbor.cncfstack.com/rancher/fleet-agent:v0.13.4 io.containerd.runc.v2
93635facef30f4bc6854680076420a6f15661f1bf44e8c42389c92ba22634d77 harbor.cncfstack.com/rancher/fleet:v0.13.4 io.containerd.runc.v2
a311aa83de6f0f03f7f99a8a0a9020e56f728358ebcba6a3c1f235ebd7493d7c harbor.cncfstack.com/rancher/mirrored-cluster-api-controller:v1.10.2 io.containerd.runc.v2
a53166e00d5936043c771b2282718ab017e3d6b76096de58c1836fc89cee3526 harbor.cncfstack.com/rancher/remotedialer-proxy:v0.5.0 io.containerd.runc.v2
ad3e171cc1affbf29d29a3dc2d851b6c2914fde8a98fa257cebfe4b0e7d50f5f docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
b2b8d9bccbb06a6f397e11c185e2a46efcb9936f2247b267adf74ae81969225a harbor.cncfstack.com/rancher/system-upgrade-controller:v0.16.3 io.containerd.runc.v2
c4d42ce2956edf9b4c9bb299183999ffc150075bbb33c2177c0df630b3c8cabb docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
ce008011c92d12b8fdd6853b54cc4d35da0d3fc41257542a932e1b169168fc16 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
d7017e579bdbd3139cbcb00287ee7393290fe1e64709de3d86e6156e025563e3 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
db8d723d8b545d5eee11f71b7cd67ebdf8b51039f09800c1570281ff21d5e8f2 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
ea4d1d59374fb8b6bcf005043bb60a5ac346325850d3221a1f5a8dddfe3f3680 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
ed70a01fd7efc92ba9476dee0385486b93d5353dc16a8aee7bc82d42bfb00414 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
eea4dca040afb1cd67050fcbbeffd02c525a123ad7aae50c41dfa2df61b74331 harbor.cncfstack.com/rancher/rancher-webhook:v0.8.3 io.containerd.runc.v2
fbda39d7f6932adf64c827b8518be1feb03cadab4928795cd199621629008c89 docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
fec0d4d2a96967804303d3d072d654a2c57498ed3810f8875c8297555789a014 docker.io/rancher/mirrored-coredns-coredns:1.12.1 io.containerd.runc.v2
ffa46d8782fc47d0f35986d500803de58beb45f6c230a77c7cdc841c5c58f8aa docker.io/rancher/mirrored-pause:3.6 io.containerd.runc.v2
3. 配置Keycloak提供SSO统一登录
SSO登录可以统一管理用户的账号信息,给 Rancher 配置 Keycloak 登录主要分为以下几步
- 3.1. 在 Keycloak 中创建一个 Rancher 客户端
- 3.2. 在 Rancher 中配置 Keycloak
- 3.3. 在 Keycloak 配置 Rancher 回调地址
3.1. 在 Keycloak 中创建一个 Rancher 客户端
在 Keycloak 中新建一个客户端,如定义客户端ID为 rancher。 对于有效的重定向 URI 可以直接根据域名来拼接填写,也可以在 Rancher 中配置配置过程中看到这个回调地址,后面步骤回再次说明。

除了基本信息,还需要开启"功能配置"中的客户端认证。

创建客户端后,会生成一个 Secret,请保存好。
3.2. 在 Rancher 中配置 Keycloak
在 Rancher 中找到 用户-> 认证-> Keycloak(OIDC)

在详细配置页面主要填写如下配置

- 客户端ID:与 Keyclaok 中的ID一致 (如rancher)
- 客户端Secret:在 Keycloak 的客户端的凭证中查看
- 端点URL:是 Keycloak的默认地址(如https://keycloak.cncfstack.com)
- Realm: 是 Keycloak 中管理的多租户,默认为
master,我这里为cs
然后保存配置。
3.3. 在 Keycloak 配置 Rancher 回调地址
在 Rancher 中填写配置时或者在创建成功后回提示回调地址,如 https://rancher.cncfstack.com/verify-auth
将这个地址填写到 Keycloak 的客户端配置中,即 步骤 3.1 中填写的回调地址。
然后就可以基于 SSO 登录进行登录。
在线体验
藏云阁官方提供了在线的 Rancher 体验服务,地址为 https://rancher.cncfstack.com 。
该环境使用SSO统一登录,你可以用于学习 Rancher 和 Kuberentes 使用。
注意:由于环境资源有限,环境不定期会重置,将会清空所有数据,请勿保存重要数据。