自签名 ssl 证书 + ingress + 安装 Rancher HA
本文永久链接: https://www.xtplayer.cn/rancher/install/ha-self-signed-ssl-ingress/
节点软硬件要求
节点硬件要求请参考: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
准备 Rancher Chart
访问 rancher mirror 下载 Rancher Chart 压缩包,解压后应该有 rancher 文件夹。
创建自签名 ssl 证书
自签名 ssl 证书创建方法请参考 自签名 ssl 证书,注意不要修改生成的文件名称。
创建 K8S ssl 密文
使用 kubectl
创建 tls
类型的 secrets
。
注意:文件的名称一定要与下面的名称相同。
# 指定配置文件 |
安装 Rancher Server
更多的 chart 参数可访问 https://docs.rancher.cn/docs/rancher2/installation_new/install-rancher-on-k8s/chart-options/_index
# 指定配置文件 |
注意: 申请证书对应的
域名
需要与hostname
选项匹配,否则ingress
将无法代理访问 Rancher。
(可选)为 Agent Pod 添加主机别名(/etc/hosts)
如果你的环境中没有 DNS 服务器做域名解析,那么这个时候通过 kubectl --kubeconfig=xxx.yaml -n cattle-system get pod
应该是可以看到 agent pod 一直无法正常运行,查看 agent pod 日志会发现是因为连接不上 rancher server url。
解决方法
可以通过给
cattle-cluster-agent Pod
和cattle-node-agent pod
添加主机别名(/etc/hosts),让其可以正常通过Rancher Server URL
与 Rancher Server 通信(前提是 IP 地址可以互通)
。cattle-cluster-agent pod
export kubeconfig=xxx/xxx/xx.kubeconfig.yml
kubectl --kubeconfig=$kubeconfig -n cattle-system \
patch deployments cattle-cluster-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"demo.cnrancher.com"
],
"ip": "192.168.1.100"
}
]
}
}
}
}'cattle-node-agent pod
export kubeconfig=xxx/xxx/xx.kubeconfig.yml
kubectl --kubeconfig=$kubeconfig -n cattle-system \
patch daemonsets cattle-node-agent --patch '{
"spec": {
"template": {
"spec": {
"hostAliases": [
{
"hostnames":
[
"xxx.rancher.com"
],
"ip": "192.168.1.100"
}
]
}
}
}
}'注意 1、替换其中的域名和 IP
2、别忘记 json 中的引号。