权威 ssl 证书 + Nodeport + 外部 L7 + 安装 Rancher HA
本文永久链接: https://www.xtplayer.cn/rancher/install/ha-nodeport-external-l7/
架构说明

节点软硬件要求
节点硬件要求请参考:https://docs.rancher.cn/docs/rancher2/installation_new/requirements/_index/
节点基础环境配置
请参考 基础环境配置
同步镜像
如果你是在离线环境安装,请先访问rancher 离线安装镜像同步,按照方法同步所有镜像到离线私有镜像仓库。如果主机能够直接拉取镜像,则跳过此步骤。
创建 rke 配置文件
使用下面的示例创建 rancher-cluster.yml
文件,使用创建的 3 个节点的 IP 地址或域名替换列表中的 IP 地址。
注意: 如果节点有
公网地址 和 内网地址
地址,建议手动设置internal_address:
以便 Kubernetes 将内网地址用于集群内部通信。如果需要开启自动配置安全组或防火墙,某些服务(如 AWS EC2)需要设置internal_address:
。
nodes: |
更多 etcd 配置请参考: etcd 优化
RKE 节点参数说明
参数 | 必须 | 描述 |
---|---|---|
address |
yes | 公共域名或 IP 地址 |
user |
yes | 可以运行 docker 命令的用户 |
role |
yes | 分配给节点的 Kubernetes 角色列表 |
internal_address |
no | 内部集群通信的私有域名或 IP 地址 |
ssh_key_path |
no | 用于对节点进行身份验证的 SSH 私钥的路径(默认为~/.ssh/id_rsa) |
镜像仓库配置
如果需要使用自己镜像仓库的镜像或者是离线安装,那么可以在 private_registries
字段中配置私有镜像仓库信息。
选项 | 值 | 描述 |
---|---|---|
url |
‘’ | 镜像仓库地址 |
user |
‘’ | 镜像仓库用户名 |
password |
‘’ | 镜像仓库密码 |
is_default |
true/false |
这个参数很重要,当配置这个参数后, rke 会自动为系统镜像添加镜像仓库前缀, 比如 rancher/rancher 会变为 192.168.1.1/rancher/rancher, 用于离线环境或者使用自己的私有仓库构建集群。 |
完整的配置示例,请参考完整-cluster-yml-示例
高级配置
RKE 有许多配置选项可用于自定义安装以适合您的特定环境,有关选项和功能的完整列表,请查看RKE 文档 。
安装 rke、kubectl、helm 工具
需要选择一个节点用来运行 rke、kubectl、helm 等命令,你可以叫它为 操作节点。这个节点可以是 local 集群中的任意一台,也可以是专门准备的独立的一个节点。
# rke |
或者访问 http://mirror.cnrancher.com/ 下载 rke、kubectl、helm 二进制文件,然后放在操作节点的 /usr/local/bin
目录下,并给与执行权限。
创建 Kubernetes 集群
运行 RKE 命令创建 Kubernetes 集群
rke up --config ./rancher-cluster.yml |
完成后,它应显示:Finished building Kubernetes cluster successfully
。
测试集群
RKE 会自动创建 kube_config_rancher-cluster.yml
。这个文件包含 kubectl 和 helm 访问 K8S 的凭据,请妥善保管。
注意: 如果您使用的文件不叫
rancher-cluster.yml
, 那么这个kubeconfig
配置文件将被命名为kube_config_<FILE_NAME>.yml
。
通过 kubectl
测试您的连接,并查看您的所有节点是否处于 Ready
状态。
kubectl --kubeconfig=kube_config_xxx.yml get nodes |
检查集群 Pod 的运行状况
- Pods 是
Running
或者Completed
状态。 READY
列显示所有正在运行的容器 (i.e.3/3
),STATUS
显示 POD 是Running
。- Pods 的
STATUS
是Completed
为run-one Jobs
,这些 podsREADY
应该为0/1
。
kubectl --kubeconfig=kube_config_xxx.yml get pods -A |
Helm 安装 Rancher
有的场景,外部有七层负载均衡器作为 ssl 终止,常见用法是把负载均衡器的 443
端口代理到内部应用的非 https 端口上,比如 80
。
为了保证网络转发性能,这里禁用了内置的 ingress 服务,以 NodePort 方式
把 Rancher Server 容器的 80
端口映射到宿主机 30303
端口上。再把外部七层负载均衡器的 443
端口反向代理到 Rancher Server 对应的 NodePort 端口上。访问外部七层负载均衡器的 443
端口的流量将转发到 Rancher Server 容器的 80
端口。
准备 chart
Chart 地址: https://gitee.com/rancher/server-chart.git
- 本 Chart 基于 https://github.com/rancher/server-chart/ 修改,当前支持版本为
rancher v2.1.7、v2.1.8、v2.1.9、v2.2.0、v2.2.1、v2.2.2、v2.2.3、v2.2.4、v2.2.5、v2.2.6 v2.2.7 v2.2.8 v2.2.9 v2.3.3
。 - 不支持 LetsEncrypt、cert-manager 提供证书,需手动通过 Secret 导入证书, 默认开启审计日志功能。
制作自签名证书或重命名权威认证证书
- 仓库根目录有一键创建自签名证书脚本,会自动创建
cacerts.pem
、tls.key
、tls.crt
;
--ssl-domain: 生成 ssl 证书需要的主域名,如不指定则默认为 www.rancher.local,如果是 ip 访问服务,则可忽略; |
- 如果使用权威认证证书,需要重命名 crt 和 key 为
tls.crt
和tls.key
。
准备 SSL 证书密文
把 CA 证书作为密文导入 K8S,如果是使用权威认证证书,可以跳过此步骤。
# 指定 kubeconfig 配置文件路径 |
helm 安装 Rancher
- helm 3.x 安装
git clone -b v2.4.11 https://gitee.com/rancher/server-chart.git |
注意:
- 通过
--kubeconfig=
指定 kubectl 配置文件; - 如果使用权威 ssl 证书,则去除
--set privateCA=true
; - 如果为离线安装,设置
--set privateRegistry=true
使用私有仓库,并且使用--set systemDefaultRegistry=
指定离线私有仓库地址,注意不要添加协议头(http 或者 https); - 如果镜像名非标准 rancher 镜像名,可通过
--set rancherImage=
指定镜像名称,不要指定镜像版本,系统会根据 chart 版本自动获取镜像版本; - 默认自动获取 chart 版本号作为 Rancher 镜像版本号,如果想指定镜像版本号,可通过配置
--set rancherImageTag=v2.3.x
来指定; - 点击查看更多Chart 设置参数;
- 如果 rancher server 要访问自签名 ssl 证书的服务,比如自签名证书的 git 服务,那么需要提前把 CA 文件映射到 rancher server 容器从,rancher server 可以通过此 CA 去校验自签名 ssl 证书。
配置外部七层负载均衡器
NGINX 负载均衡器
默认情况下,rancher 容器会将 80 端口上的请求重定向到 443 端口上。如果 Rancher Server 通过负载均衡器来代理,这个时候请求是通过负载均衡器发送给 Rancher Server,而并非客户端直接访问 Rancher Server。在非全局 https
的环境中,如果以外部负载均衡器作为 ssl 终止,这个时候通过负载均衡器的 https
请求将需要被反向代理到 Rancher Server http(80)上。在负载均衡器上配置 X-Forwarded-Proto: https
参数,Rancher Server http(80)上收到负载均衡器的请求后,就不会再重定向到 https(443)上。
负载均衡器或代理必须支持以下参数:
- WebSocket 连接
- SPDY/HTTP/2协议
- 传递/设置以下 headers:
Header | Value | 描述 |
---|---|---|
Host |
传递给 Rancher 的主机名 | 识别客户端请求的主机名。 |
X-Forwarded-Proto |
https |
识别客户端用于连接负载均衡器的协议。注意:如果存在此标头,rancher/rancher 不会将 HTTP 重定向到 HTTPS。 |
X-Forwarded-Port |
Port used to reach Rancher. | 识别客户端用于连接负载均衡器的端口。 |
X-Forwarded-For |
IP of the client connection. | 识别客户端的原始 IP 地址。 |
nginx 配置示例
worker_processes 4; |
为了减少网络传输的数据量,可以在七层代理的
http
定义中添加GZIP
功能。
# Gzip Settings |
F5 七层代理
本文档基于 BIGIP-15.0.1-0.0.11.ALL-vmware
虚拟机版本编写。
配置健康检查
点击 Local Traffice
,然后点击 Monitors
旁边的➕
。Type 中选择类型为 http
,在 Send String
中填写参数为:GET /healthz \r\n
。

添加节点(可选)
可以在添加 node pool
的时候添加节点,所以当前这一步可以跳过。也可以在这一步配置好节点,添加 node pool
的时候直接选择节点。
点击
Local Traffice
,然后点击Nodes > Nodes List
旁边的➕
。配置节点信息
注意
Health Monitors
设置为None
添加 pool
点击
Local Traffice > Pools > Pool List
旁边的➕
配置节点池
- 设置节点池名称;
Health Monitors
选择前面步骤创建的健康检查;New Members
中选择Node List
,选择开始添加的节点,点击下方的Add
,端口以实际 Rancher 暴露的端口为准;
添加 irule
待添加内容
when HTTP_REQUEST {
HTTP::header insert “X-Forwarded-Proto” “https”;
HTTP::header insert “X-Forwarded-Port” 443;
HTTP::header insert “X-Forwarded-For” [IP::client_addr];
}点击
Local Traffice > iRules > iRules List
旁边的➕
设置 irule 名称,粘贴以下内容
添加证书
访问
system > Certificate Management > Traffic Certificate Management > SSL Certificate List > Import
分别选择导入类型为
key 和 certificate
,然后选择导入文件。注意: 权威证书会有中间链 CA 证书,所以这里会多一个 CA 证书,如果是自签名证书则可以忽略这个 CA 证书。
添加 SSL Profile
点击
Local Traffice > Profiles > SSL > client
旁边的➕
配置 SSL 相关参数
设置
Name
;Configuration
选择高级
,并点击右侧自定义
;Certificate Key Chain
处点击Add
,然后选择对应的证书和私钥;添加之后
其他参数保持默认。
配置 Rancher Virtual Servers
点击
Local Traffice > Virtual Servers > Virtual Server List
旁边的➕
;配置
Name
;保持
Type
为默认;配置
Source Address
为0.0.0.0/0
;根据实际情况配置
Destination Address/Mask;
Service Port
设置为443/https
;Configuration
选择高级;HTTP Profile (Client)
设置为http
;SSL Profile (Client)
选择之前创建的 SSL Profile;WebSocket Profile
选择WebSocket
;Source Address Translation
选择auto map
;在
Resources\iRules
中选择之前创建 iRules 规则;Default Pool
选择之前创建的主机池;完整配置
HTTP 重定向 HTTPS
点击 Local Traffice > Virtual Servers > Virtual Server List
旁边的➕
;
- 配置
Name
; - 保持
Type
为默认; - 配置
Source Address
为0.0.0.0/0
; - 根据实际情况配置
Destination Address/Mask;
Service Port
设置为80/http
;Configuration
选择基础
;HTTP Profile (Client)
设置为http
;- 在
Resources\iRules
中选择_sys_https_redirect
;