不翻墙,基于Rancher极速启动Kubernetes,配置SSO登录,在线环境开放学习体验

本文提供Rancher和Kuberentes快速安装的步骤和国内镜像仓库配置,并介绍Rancher单机原理,配置Keycloak提供SSO统一登录,并提供在线环境开放学习体验。

主要包含以下内容:

  1. 基于藏云阁镜像仓库快速部署Rancher和K8s集群
  2. Rancher 单机安装的原理
  3. 配置Keycloak提供SSO统一登录
  4. 免费开放的在线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 使用。

注意:由于环境资源有限,环境不定期会重置,将会清空所有数据,请勿保存重要数据。

相关推荐
蝎子莱莱爱打怪1 天前
GitLab CI/CD + Docker Registry + K8s 部署完整实战指南
后端·docker·kubernetes
蝎子莱莱爱打怪4 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
阿里云云原生5 天前
Kubernetes 官方再出公告,强调立即迁移 Ingress NGINX
kubernetes
至此流年莫相忘5 天前
Kubernetes实战篇之配置与存储
云原生·容器·kubernetes
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2