本文永久链接: https://www.xtplayer.cn/rancher/install/single-node-install-custom-ssl-l4/

在线安装

Rancher 安装可以使用自己生成的自签名证书,如果没有自签名证书,可通过脚本一键生成自签名 ssl 证书

docker_data_dir=xxxx # 定义绝对路径

mkdir -p ${docker_data_dir}/data # rancher 数据目录
mkdir -p ${docker_data_dir}/auditlog # 审计日志目录
mkdir -p ${docker_data_dir}/ssl # 自定义 CA 证书目录

docker run -d --restart=unless-stopped \
-p 10080:80 -p 10443:443 \ ①
-v ${docker_data_dir}/data:/var/lib/rancher \ ②
# 审计日志配置 ③
-e AUDIT_LEVEL=3 \
-v ${docker_data_dir}/auditlog:/var/log/auditlog \
# 以下两行为自定义 CA 根证书 ④
-v ${docker_data_dir}/ssl/ca-additional.pem:/etc/ssl/certs/ca-additional.pem \
-v ${docker_data_dir}/ssl/ca-additional.pem:/etc/rancher/ssl/ca-additional.pem \
# 以下三行为配置自己的 ssl 证书 ⑤
-v ${docker_data_dir}/ssl/tls.crt:/etc/rancher/ssl/cert.pem \
-v ${docker_data_dir}/ssl/tls.key:/etc/rancher/ssl/key.pem \
-v ${docker_data_dir}/ssl/cacerts.pem:/etc/rancher/ssl/cacerts.pem \
rancher/rancher:stable
  1. 如果要在安装 rancher 的主机上安装 K8S 集群,那么在 ① 处需要修改主机端口为非 80 和非 443,比如:-p 10080:80 -p 10443:443 ;
  2. 为了保证数据持久保存,需要在 ② 处映射 rancher 数据到主机路径;
  3. 如果不需要开启升级日志,则设置 AUDIT_LEVEL=0;
  4. rancher 内置的应用商店,是利用 git 工具去获取 git 服务器 repo 中 chart。如果 git 服务器用的自签名 ssl 证书,那么需要给 rancher 配置自签名 CA 证书用以访问 git 服务器时做认证。所以需要在 ④ 处把自签名 CA 映射到 rancher 容器中;
  5. 第 ⑤ 处的证书文件建议保持一致;

离线安装

离线安装方法与在线安装方法基本相同,根据 ssl 证书类型选择不同的安装方法,但是有个前提是已经将镜像同步到离线镜像仓库了,可以参考准备离线镜像来同步镜像。除此之外,有以下几点注意:

  1. 修改 rancher/rancher:stable 为离线镜像仓库中的镜像地址,比如:192.168.100.100/rancher/rancher:stable

  2. Rancher v2.3.0 之后的版本默认内置了 system-chart,比如:监控。如果你的环境中没有 git 服务器用来同步 GitHub 上的 system-chart,那么可以通过设置以下环境变量来使用 Rancher 内置的 system-chart。

    -e CATTLE_SYSTEM_CATALOG=bundled \

    注意:如果将来要切换为外部 Git 仓库的 system-chart,需要修改变量 CATTLE_SYSTEM_CATALOG=external,不能去掉这个变量。

  3. 在 Rancher 运行起来后进入 Rancher UI,进入Settings视图,查找 system-default-registry 并点击 Edit

    改为您的私有仓库地址, 例如:registry.yourdomain.com:port, 不要添加 http:// 或 https:// 前缀。

外部负载均衡

有时候主机只有一个内网 IP 而这个 IP 我们又无法直接访问,对于这种场景,需要有一个既可以访问 rancher server,又可以被用户直接访问的工具来代理。比较常见的,比如 nginx 的反向代理,下文所指的负载均衡均以 nginx 为例。

NGINX 四层代理参考配置

worker_processes 4;
worker_rlimit_nofile 40000;

events {
worker_connections 8192;
}

stream {
upstream rancher_servers_http {
least_conn;
server <IP_NODE_1>:10080 max_fails=3 fail_timeout=5s; # 根据实际 rancher 映射端口修改
}
server {
listen 80;
proxy_pass rancher_servers_http;
}

upstream rancher_servers_https {
least_conn;
server <IP_NODE_1>:10443 max_fails=3 fail_timeout=5s; # 根据实际 rancher 映射端口修改
}
server {
listen 443;
proxy_pass rancher_servers_https;
}
}