2 - 七层负载均衡HA部署
以下步骤将创建一个新的Kubernetes集群,专用于Rancher server高可用(HA)运行,本文档将引导您使用Rancher Kubernetes Engine(RKE)配置三个节点的集群.
一、Linux主机要求
二、配置负载均衡器(以NGINX为例)
默认情况下,rancher容器会将80端口上的请求重定向到443端口上。如果rancher server通过负载均衡器来代理,这个时候请求是通过负载均衡器发送给rancher server,而并非客户端直接访问rancher server。在非全局的环境中,如果以外部负载均衡器作为ssl终止,这个时候通过负载均衡器的https
请求将需要被反向代理到rancher server http(80)上。在负载均衡器上配置X-Forwarded-Proto: https
参数,rancher server http(80)上收到负载均衡器的请求后,就不会再重定向到https(443)上。
负载均衡器或代理必须支持以下参数:
- WebSocket 连接
- SPDY/HTTP/2协议
- 传递/设置以下headers:
我们有以下负载均衡器的示例配置:
三、配置DNS
选择一个用于访问Rancher的域名(FQDN)(例如,demo.rancher.com).
1、登录DNS服务,创建一条
A
记录指向负载均衡主机IP;2、在终端中执行以下命令来验证运行解析是否生效:
nslookup HOSTNAME.DOMAIN.COM
如果解析生效
如果解析不生效
nslookup demo.rancher.com
DNS Server: YOUR_HOSTNAME_IP_ADDRESS
DNS Address: YOUR_HOSTNAME_IP_ADDRESS#5
** server can't find demo.rancher.com: NXDOMAIN
如果环境为内部网络且无DNS服务器,可以通过修改客户端的/etc/hosts
文件,添加相应的条目。比如:
RKE是一种快速,通用的Kubernetes安装程序,可用于在Linux主机上安装Kubernetes。我们将使用RKE来配置Kubernetes集群并运行Rancher。
1、打开浏览器访问页面,根据您操作系统类型下载最新版本的RKE:
- MacOS:
rke_darwin-amd64
- Linux:
rke_linux-amd64
- Windows:
rke_windows-amd64.exe
2、通过chmod +x
命令给刚下载的RKE二进制文件添加可执行权限。
# MacOS
$ chmod +x rke_darwin-amd64
# Linux
$ chmod +x rke_linux-amd64
3、确认RKE是否是最新版本:
# MacOS
./rke_darwin-amd64 --version
# Linux
./rke_linux-amd64 --version
步骤结果: 您将看到以下内容:
五、下载RKE配置模板
RKE通过 .yml
配置文件来安装和配置Kubernetes集群,有2个模板可供选择,具体取决于使用的SSL证书类型。
根据您使用的SSL证书类型,选择模板下载:
重命名模板文件为
rancher-cluster.yml
六、节点配置
获得rancher-cluster.yml配置文件模板后,编辑节点部分以指向Linux主机。
节点免密登录
ssh-keygen
- 第二步:通过ssh-copy-id命令将公钥复制到远程机器中
ssh-copy-id -i .ssh/id_rsa.pub $user@192.168.x.xxx
- 编辑
rancher-cluster.yml
配置文件
编辑器打开 rancher-cluster.yml
文件,在nodes配置版块中,修改 IP_ADDRESS_X
and USER
为您真实的Linux主机IP和用户名,ssh_key_path
为第一步生成的私钥文件,如果是在RKE所在主机上生成的公钥私钥对,此配置可保持默认:
nodes:
- address: IP_ADDRESS_1
# THE IP ADDRESS OR HOSTNAME OF THE NODE
user: USER
# USER WITH ADMIN ACCESS. USUALLY `root`
role: [controlplane,etcd,worker]
ssh_key_path: ~/.ssh/id_rsa
# USUALLY THE VALUE ABOVE
- address: IP_ADDRESS_2
user: USER
role: [controlplane,etcd,worker]
ssh_key_path: ~/.ssh/id_rsa
- address: IP_ADDRESS_3
user: USER
role: [controlplane,etcd,worker]
ssh_key_path: ~/.ssh/id_rsa
services:
etcd:
# rke 0.2之前版本
snapshot: true
creation: 6h
retention: 24h
# rke 0.2之后版本 (两段配置二选一)
backup_config:
enabled: true # enables recurring etcd snapshots
interval_hours: 6 # time increment between snapshots
retention: 60 # time in days before snapshot purge
# Optional S3
s3_backup_config:
access_key: "myaccesskey"
secret_key: "myaccesssecret"
bucket_name: "my-backup-bucket"
endpoint: "s3.eu-west-1.amazonaws.com"
region: "eu-west-1"
七、证书配置
出于安全考虑,使用Rancher需要SSL加密。 SSL可以保护所有Rancher网络通信,例如登录或与集群交互时。
如果没有自己的ssl证书,可访问一键生成自签名ssl证书。
- 方案A — 使用自签名证书
在kind: Secret
和name: cattle-keys-ingress
中:
- 替换为CA证书文件的base64编码字符串(通常称为ca.pem或ca.crt)
结果:替换值后,文件应如下所示(base64编码的字符串应该不同):
- 方案B—使用权威CA机构颁发的证书
如果您使用的是权威CA机构颁发的证书,则不需要做任何操作。
RKE配置文件中有一个<FQDN>
引用,编辑配置文件替换<FQDN>
:
结果: 替换值后,文件应如下所示(base64编码的字符串应该不同):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: cattle-system
annotations:
nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800" # Max time in seconds for ws toremain shell window open
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800" # Max time in seconds for ws toremain shell window open
spec:
- host: demo.rancher.com
http:
paths:
- backend:
serviceName: cattle-service
servicePort: 80
九、备份配置文件
保存关闭.yml文件后,将其备份到安全位置。升级Rancher时,您需要再次使用此文件。
十、运行RKE
完成所有配置后,您可以通过运行rke up命令并使用–config参数指定配置文件来完成Rancher 集群的安装。
下载RKE二进制文档到您的主机,确保
rancher-cluster.yml
与下载的rke
在同一目录下;打开shell 终端,切换路径到RKE所在的目录;
根据操作系统类型,选择以下命令并执行:
# MacOS
./rke_darwin-amd64 up --config rancher-cluster.yml
# Linux
./rke_linux-amd64 up --config rancher-cluster.yml
结果: 应该会有以下日志输出:
INFO[0000] Building Kubernetes cluster
INFO[0000] [dialer] Setup tunnel for host [1.1.1.1]
INFO[0000] [network] Deploying port listener containers
INFO[0000] [network] Pulling image [alpine:latest] on host [1.1.1.1]
...
INFO[0101] Finished building Kubernetes cluster successfully
十一、备份自动生成的kubectl配置文件
在安装过程中,RKE会自动生成一个kube_config_rancher-cluster.yml与RKE二进制文件位于同一目录中的配置文件。此文件很重要,它可以在Rancher server故障时,利用kubectl通过此配置文件管理Kubernetes集群。复制此文件将其备份到安全位置。
如果您没有内部DNS服务器而是通过添加/etc/hosts
主机别名的方式指定的Rancher server域名,那么不管通过哪种方式(自定义、导入、Host驱动等)创建K8S集群,K8S集群运行起来之后,因为cattle-cluster-agent Pod
和cattle-node-agent
无法通过DNS记录找到Rancher server
,最终导致无法通信。
可以通过给cattle-cluster-agent Pod
和cattle-node-agent
添加主机别名(/etc/hosts),让其可以正常通信(前提是IP地址可以互通)
。
- cattle-cluster-agent pod
- cattle-node-agent pod
export kubeconfig=xxx/xxx/xx.kubeconfig.yaml
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"
}
]
}
}
}
十三、FAQ和故障排除
FAQ中整理了常见的问题与解决方法。