RKE安装k8s及部署高可用rancher

一 了解 Rancher

1 推荐架构

安装 Rancher 的方式有两种:单节点安装和高可用集群安装。因为单节点安装只适用于测试和 demo 环境,而且单节点安装和高可用集群安装之间不能进行数据迁移,所以推荐从一开始就使用高可用集群安装的方式安装 Rancher。
  建议将 Rancher Server 安装在高可用的 Kubernetes 集群上,主要是因为它可以保护 Rancher Server 的数据。在高可用安装中,负载均衡器充当客户端的单点入口,并在集群中的多台服务器之间分配网络流量,这有助于防止任何一台服务器成为单点故障。

        不建议在单个 Docker 容器中安装 Rancher,因为如果该节点发生故障,则其他节点上将没有可用的集群数据副本,并且可能会丢失 Rancher Server 上的数据。

        Rancher 需要安装在高可用的 RKE(Rancher Kubernetes Engine)Kubernetes 集群上,或高可用的 K3s (轻量级 Kubernetes) Kubernetes 集群。 RKE 和 K3s 都是经过完全认证的 Kubernetes 发行版。

1.1 RKE k8s Kubernetes 集群安装

        在 RKE 安装中,集群数据将在集群中的三个 etcd 节点上进行复制,这是为了保障在一个 etcd 节点发生故障时,可以提供冗余和数据复制。
  使用 RKE Kubernetes 集群运行 Rancher Management Server 的架构:

 

2 负载均衡配置的推荐配置参数

我们建议您使用以下方案,配置您的负载均衡和 Ingress Controller:

  • Rancher 的 DNS 应该被解析到四层负载均衡器上;
  • 负载均衡器应该把 TCP/80 端口和 TCP/443 端口的流量转发到集群中全部的 3 个节点上;
  • Ingress Controller 将把 HTTP 重定向到 HTTPS,在 TCP/443 端口使用 SSL/TLS;
  • Ingress Controller 把流量转发到 Rancher Server 的 pod 的 80 端口。

在 kubernetes 集群中安装 Ranhcer,并使用四层负载均衡,SSL 终止在 Ingress Controller 中。

        为了达到最好的性能和安全条件,我们建议您为 Rancher 创建一个专用的 Kubernetes 集群,只在这个机器中部署 Rancher Server,不在这个集群中运行应用或程序。部署 Rancher 后,您可以 创建新集群或导入已有集群 ,然后用这些集群启动您自己的应用或程序。

        Rancher 安装在 RKE Kubernetes 集群上,则该集群应具有三个节点,并且每个节点都应具有所有三个 Kubernetes 角色:etcd,controlplane 和 worker。

二 软件要求

下面的版本为当前的最新版和稳定版:

类型Rancher 版本Docker 标签Helm 仓库Helm Chart 版本
最新版v2.5.8rancher/rancher:latestserver-charts/latestv2.5.8
稳定版v2.5.8rancher/rancher:stableserver-charts/stablev2.5.8

1 Rancher 支持的 kubernetes 版本

更多信息可以转到官方链接查看。此处我仅列举了本人文档里试验总结的官方最新稳定版的相关信息:https://rancher.com/support-maintenance-terms/all-supported-versions/rancher-v2.5.8/

1.1 在 RKE 上安装 Ranhcer v2.5.8

适用于本地集群的 RKE CLI 和 K8S:

Rancher 版本推荐的 CLI 版本KUBERNETES 版本
v2.5.8v1.2.12v1.20.4(默认)
v1.19.8
v1.18.16
v1.17.17

操作系统和 Docker:

类型版本已于 1 验证 / 认证
CentOS7.7、7.8、7.9Docker 18.06.3、18.09.x,19.03.x,20.10.x

2 RKE-1.2.12

RKE 可以兼容当前的所有 Docker 版本。
  每个 RKE 版本都有受支持的 Kubernetes 版本的特定列表。如果您要使用的版本与下面列出的版本不同,则需要使用中的系统映像选项来更新 Kubernetes cluster.yml。
列举支持的 Kubernetes 版本:

1 请参考 RKE 版本说明 ,获取您当前使用的 RKE 支持的 Kubernetes 版本号。

Kubernetes 版本
v1.20.6-rancher1-1
v1.19.10-rancher1-1
v1.18.18-rancher1-2
v1.17.17-rancher2-3

2 也可以输入以下命令,快速获取支持的版本号:

./rke config --list-version --all
v1.20.6-rancher1-1
v1.17.17-rancher2-3
v1.18.18-rancher1-2
v1.19.10-rancher1-1

3 Kubectl

kubectl 可以比 kube-apiserver 高一个小版本,也可以低一个小版本。
例如:

  • 如果 kube-apiserver 当前是 1.21 版本
  • kubectl 则支持 1.22、1.21 和 1.20

4 Helm-3.5.x

  • 请使用 Helm v3.2.x 或更高版本安装或升级 Rancher v2.5.x。
  • Helm v2.16.0 或更高版本需要 Kubernetes v1.16 版本。对于默认的 Kubernetes 版本,请参考发布说明以获取所使用的 RKE 的版本。
  • 不能使用 Helm v2.15.0,因为这个版本中有一些关于转换 / 比较数字的问题。
  • 不能使用 Helm v2.12.0,因为这个版本和 cert-manager 一起使用时会有问题。
Helm 版本 支持的 Kubernetes 版本
3.5.x 1.20.x - 1.17.x
3.4.x 1.19.x - 1.16.x
3.3.x 1.18.x - 1.15.x
3.2.x 1.18.x - 1.15.x
3.1.x 1.17.x - 1.14.x
3.0.x 1.16.x - 1.13.x
2.16.x 1.16.x - 1.15.x
2.15.x 1.15.x - 1.14.x
2.14.x 1.14.x - 1.13.x
2.13.x 1.13.x - 1.12.x
2.12.x 1.12.x - 1.11.x
2.11.x 1.11.x - 1.10.x
2.10.x 1.10.x - 1.9.x
2.9.x 1.10.x - 1.9.x
2.8.x 1.9.x - 1.8.x
2.7.x 1.8.x - 1.7.x
2.6.x 1.7.x - 1.6.x
2.5.x 1.6.x - 1.5.x
2.4.x 1.6.x - 1.5.x
2.3.x 1.5.x - 1.4.x
2.2.x 1.5.x - 1.4.x
2.1.x 1.5.x - 1.4.x
2.0.x 1.4.x - 1.3.x

5 Docker-20.10.x

将最新的经过验证的 Docker 版本更新为 20.10。
每一个 Kubernetes 版本支持的 Docker 版本都不同。

6 nginx-1.14

官方已在 NGINX 1.14 上进行了测试 NGINX 配置。

7 OpenSSH-7.0+

为了可以通过 SSH 访问每一个节点,RKE 要求每个节点上安装的是 OpenSSH 的版本是 OpenSSH 7.0+。

三 主机配置

先配置 4 台最小化安装的主机,其中 3 台使用 RKE 配置 k8s 集群,然后在这个集群上配置高可用 Rancher。
  要在高可用性 RKE 集群上安装 Rancher 管理服务器,我们建议设置以下基础设施:

  • 三个 Linux 节点,通常是虚拟机。
  • 一个负载均衡器,将前端流量引导到三个节点。
  • 一个 DNS 记录,将一个 URL 映射到负载均衡器。这将成为 Rancher 服务器的 URL,下游的 Kubernetes 集群需要到达它。

1 主机基本信息

主机 IP主机名配置角色
192.168.1.65k8s-node012 线程 4Gcontrolplane,etcd,worker
172.16.10.59k8s-node022 线程 4Gcontrolplane,etcd,worker
172.16.10.33k8s-node032 线程 4Gcontrolplane,etcd,worker
172.16.10.21nginx2 线程 2Gnginx 负载均衡

2 主机初始化配置

注意:以下步骤,四台主机均要操作。

2.1 查看系统版本是否满足要求

cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)     #若系统版本为7.7 7.8 7.9 均符合

2.2 关闭防火墙和 selinux

测试环境中,为了方便将防火墙和 selinux 关闭;生产环境中,建议关闭 selinux,防火墙规则根据环境需要自定义即可。

#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

2.3 时钟同步

为了防止后续集群在客户端和服务器之间因为时钟不同步而发生验证错误。

  1. 第一种方法:
    yum install -y ntp   #每台主机安装ntp服务
    systemctl start ntpd    #启动时钟同步服务
    systemctl enable  ntpd   #设置开机启动
    ntpq -p   #查看时钟同步状态

  2. 第二种方法:
    yum install ntp ntpdate -y

    之后,选择一台主机(172.16.10.21)作为 ntp 时间服务器,修改/etc/ntp.conf文件,删除:

    server 1.centos.pool.ntp.org iburst
    server 2.centos.pool.ntp.org iburst
    server 3.centos.pool.ntp.org iburst
    

    改为:

    server ntp3.aliyun.com iburst
    

    另外,原始文件中有一行为如下内容:

    #restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
    

    去掉 #,打开注释,并将其 ip 修改为服务器所在网段:

    restrict 0.0.0.0 mask 255.255.255.0 nomodify notrap

    在集群中的其他服务器上,也要修改此文件,删除掉:

    server 1.centos.pool.ntp.org iburst
    server 2.centos.pool.ntp.org iburst
    server 3.centos.pool.ntp.org iburst
    

    加入:

    server 172.16.10.21 prefer
    

    保存后退出,在集群中的所有服务器上执行如下命令:

    systemctl stop chronyd.service
    systemctl disable chronyd.servicesystemctl restart ntpd
    systemctl enable ntpd
    

    之后,在集群中 172.16.10.21 以外的服务器上执行:

    ntpq -p
    
    [root@k8s-node01 ~]# ntpq -p
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
    *nginx           203.107.6.88     3 u   30   64  377    0.335    0.034   0.010

        说明时间已经同步。

2.4 内核参数调优

cat >> /etc/sysctl.conf << eof
vm.swappiness=0
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.neigh.default.gc_thresh1=4096
net.ipv4.neigh.default.gc_thresh2=6144
net.ipv4.neigh.default.gc_thresh3=8192
eof

使内核参数生效:

modprobe br_netfilter  #首先执行这个命令后才不会报错
sysctl -p

2.5 SSH Server 配置

SSH server 全系统配置文件,位于/etc/ssh/sshd_config,该文件必须包含以下代码,允许 TCP 转发。

AllowTcpForwarding yes#重启sshd服务
systemctl restart sshd

2.6 修改主机名

#分别修改每条主机的hostname
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
hostnamectl set-hostname k8s-node03
hostnamectl set-hostname nginx
#修改完后可直接断开Xshell的连接,再重新连接Xshell就可以看到主机名已修改了

在 /etc/hosts 文件中添加主机名配置:

cat >> /etc/hosts << eof
192.168.1.65  k8s-node01
172.16.10.59  k8s-node02
172.16.10.33 k8s-node03
172.16.10.21  nginx
eof

注 意 : 下 面 的 步 骤 仅 在 k 8 s 的 3 台 主 机 上 操 作 , n g i n x 上 不 可 以 操 作 。

2.7 关闭 swap 分区

#临时关闭
swapoff -a#永久关闭
进入/etc/fstab文件,注释掉swap分区的相关配置内容

 

2.8 加载 ipvs 相关模块

由于 ipvs 已经加入到了内核的主干,所以为 kube-proxy 开启 ipvs 的前提需要加载以下的内核模块。

cat > /etc/sysconfig/modules/ipvs.modules << eof
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
eof
chmod 755 /etc/sysconfig/modules/ipvs.modules 
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4	  #查看是否已经正确安装lipset软件包

前面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。

cat >> /etc/rc.d/rc.local << eof
bash /etc/sysconfig/modules/ipvs.modules
eofchmod +x /etc/rc.d/rc.local

四 安装 docker-20.10.6

注 意 : 仅在 k8s 节点安装 docker

  1. 若是节点主机上已安装有 docker,则先卸载及其依赖包
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

    2. 安装 epel 更新源

yum install epel-release -y

    3. 装 docker 仓库

在新主机上首次安装 docker 之前,需要设置 Docker 仓库;之后,可以从仓库安装和更新 docker。
  安装所需的软件包。yum-utils 提供了 yum-config-manager,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

yum install -y yum-utils device-mapper-persistent-data lvm2

设置docker阿里仓库。

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4. 安装 docker
按版本号排序列出存储库中可用的版本号

[root@nginx charts]# yum list docker-ce --showduplicates | sort -r
 * updates: mirrors.tuna.tsinghua.edu.cn
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
Installed Packages
 * extras: mirrors.huaweicloud.com
 * epel: mirrors.tuna.tsinghua.edu.cn
docker-ce.x86_64            3:24.0.7-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.6-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.5-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.4-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.3-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.2-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.1-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:24.0.0-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.6-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.5-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.4-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.3-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.2-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.1-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:23.0.0-1.el7                     docker-ce-stable 
docker-ce.x86_64            3:20.10.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.3-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.24-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.2-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.23-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.22-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.21-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.20-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.19-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.18-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.18-3.el7                   @docker-ce-stable
docker-ce.x86_64            3:20.10.17-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.16-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.15-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.14-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.1-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.13-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.12-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.11-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.10-3.el7                   docker-ce-stable 
docker-ce.x86_64            3:20.10.0-3.el7                    docker-ce-stable 

若是安装指定版本,例如: 

[root@k8s-node01 ~]# yum install -y docker-ce-20.10.18-3.el7 docker-ce-cli-20.10.18-3.el7 containerd.io-1.6.8-3.1.el7

安装 docker 命令补全工具:

yum install -y bash-completion

启动 docker:

systemctl start docker

5. 配置 docker 镜像下载加速器

tee /etc/docker/daemon.json << eof
{
     #"registry-mirrors":     ["https://1nj0zren.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"],
    "insecure-registries": [ "harbor.jettech.com" ],
    "log-driver": "json-file",
    "log-opts": {"max-size": "50m","max-file": "3"}
}
eof

6. 启动

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

五 使用 RKE 安装 kubernetes

 1 创建普通用户并加入 docker 组

注意:使用 rke 安装 kubernetes 时,不能以 root 用户执行,必须是一个普通用户才可以。
  在每个节点上创建 wubo 普通用户,并将其加入 docker 用户组中;把 nginx 主机当做主控机,其他主机的 wubo用户互信它的 wubo用户。

[root@nginx charts]# useradd -m wubo -G docker

echo 123456aA | passwd --stdin wubo

2 主机互信,在nginx节点执行

目前有 4 台服务器,确保可以通过 ssh 互相访问。

[root@nginx charts]# ssh-keygen

ssh-copy-id -i wubo@192.168.1.65
ssh-copy-id -i wubo@172.16.10.59
ssh-copy-id -i wubo@172.16.10.33
ssh-copy-id -i wubo@172.16.10.21

3 在 nginx 节点下载安装 RKE-1.2.12

3.1 下载 RKE

登录主机,打开浏览器,访问 RKE 版本发布页面,下载最新的 RKE v1.2.12。 https://download.fastgit.org/rancher/rke/releases/download/v1.2.12/rke_linux-amd64


[root@nginx charts]#mv rke_linux-amd64 /usr/local/bin/rke 
[root@nginx charts]#chmod +x /usr/local/bin/rke 
[root@nginx charts]# rke  -v
rke version v1.2.12

3.2 为 kubernetes 集群准备节点

注 意 :需 要 在 每 个 节 点 执 行
  kubernetes 集群组件需要在 Linux 发行版上的 Docker 中运行,只要是能安装和运行 docker 是 linux 发行版,都可以使用。

  1. SSH 用户 - 使用 SSH 访问节点的用户必须是节点上 docker 用户组的成员。
  • 添加到 docker 用户组的用户会自动获得主机的 root 权限,运行上述命令前,请确认您是否想让该用户获得 root 权限。运行命令后,请妥善保存该用户的认证凭据。
  • 如果您无法切换到 root 用户,不能运行上述命令将用户添加到 docker 用户组
  1. 禁用所有的 work 节点上的交换功能(swap)。
  2. 在命令行工具中输入以下命令和脚本,检查下列模组是否存在。
// 配置以下脚本
# vim module.sh
modprobe -a br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack nf_conntrack_ipv4   nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink udp_tunnel veth vxlan x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport xt_nat xt_recent xt_set  xt_statistic xt_tcpudp

for module in br_netfilter ip6_udp_tunnel ip_set ip_set_hash_ip ip_set_hash_net iptable_filter iptable_nat iptable_mangle iptable_raw nf_conntrack_netlink nf_conntrack nf_conntrack_ipv4   nf_defrag_ipv4 nf_nat nf_nat_ipv4 nf_nat_masquerade_ipv4 nfnetlink udp_tunnel veth vxlan x_tables xt_addrtype xt_conntrack xt_comment xt_mark xt_multiport xt_nat xt_recent xt_set  xt_statistic xt_tcpudp;
do
	if ! lsmod | grep -q $module; then
		echo "module $module is not present";
	fi
done
done# chmod +x module.sh
# sh module.sh

3.3 创建集群配置文件 - cluster.yml

创建一个名为 cluster.yml 的 Kubernetes 集群配置文件。在后续步骤中,当使用 RKE 命令设置集群时,它将使用此文件在节点上安装 Kubernetes。
  RKE 适配了高可用集群,您可以在 cluster.yml 文件中配置多个 controlplane 节点。RKE 会把 master 节点的组件部署在所有被列为 controlplane 的节点上,同时把 kubelets 的默认连接地址配置为 127.0.0.1:6443 。这个地址是 nginx-proxy 请求所有 master 节点的地址。
  创建高可用集群需要指定两个或更多的节点作为 controlplane 。
  RKE 使用集群配置文件 cluster.yml 规划集群中的节点,例如集群中应该包含哪些节点,如何部署 Kubernetes。您可以通过该文件修改很多集群配置选项。
  如果您的节点具有公共和内部地址,建议设置 internal_address: 这样 Kubernetes 会将其用于集群内通信。
  RKE 需要通过 SSH 连接到每个节点,并且它将在默认位置 ~/.ssh/id_rsa 中寻找私钥。如果您的默认私钥与节点的私钥不在同一个位置,则还需要为该节点配置 ssh_key_path 选项。

我这里根据官网列举了几个 RKE 节点选项:

选项必填描述
address公用 DNS 或 IP 地址
user可以运行 docker 命令的用户
role分配给节点的 Kubernetes 角色列表
internal_address内部集群流量的专用 DNS 或 IP 地址
ssh_key_path用于对节点进行身份验证的 SSH 私钥的路径(默认为~/.ssh/id_rsa)
cluster_name集群名称默认集群名称:local
ignore_docker_version检查 docker 版本在运行 RKE 前是否执行 Docker 版本检测,可选值为 true 和 false,默认值为 false
kubernetes_versionkubernetes 版本将原有的版本号修改为新的版本号即可,RKE 目前不支持回滚 Kubernetes 版本。
prefix_path前缀路径默认下 RKE 存储 ROS、CoreOS 等操作系统的相关资源时,添加一个前缀:/opt/rke
ssh_key_path集群 ssh 秘钥路径RKE 使用 ssh 连接到主机,通常情况下,每个节点都会在 nodes 部分为每个 ssh 密钥设置一个独立的路径。
………………
  • 高级配置: RKE 有许多配置选项可用于在您的特定环境中进行自定义安装。请参阅 RKE 文档 来了解 RKE 的选项和功能的完整列表。
  • 要为大规模 Rancher 安装 etcd 集群,请参阅 etcd 设置指南 。
  1. 创建集群配置文件 cluster.yml 的方式有两种:
  • 使用 minimal cluster.yml 创建集群配置文件,然后将您使用的节点的相关信息添加到文件中。
  • 使用 rke config 命令 创建集群配置文件,然后将集群参数逐个输入到该文件中。

     2. 使用 rke config运行 rke config 命令,在当前路径下创建 cluster.yml 文件。这条命令会引导您输入创建集群所需的所有参数,详情请参考集群配置选项。查看支持的镜像列表

[root@nginx locale]# rke config -s
INFO[0000] Generating images list for version [v1.20.10-rancher1-1]: 
rancher/mirrored-coreos-etcd:v3.4.15-rancher1
rancher/rke-tools:v0.1.78
rancher/mirrored-k8s-dns-kube-dns:1.15.10
rancher/mirrored-k8s-dns-dnsmasq-nanny:1.15.10
rancher/mirrored-k8s-dns-sidecar:1.15.10
rancher/mirrored-cluster-proportional-autoscaler:1.8.1
rancher/mirrored-coredns-coredns:1.8.0
rancher/mirrored-k8s-dns-node-cache:1.15.13
rancher/hyperkube:v1.20.10-rancher1
rancher/mirrored-coreos-flannel:v0.13.0
rancher/flannel-cni:v0.3.0-rancher6
rancher/mirrored-calico-node:v3.17.2
rancher/mirrored-calico-cni:v3.17.2
rancher/mirrored-calico-kube-controllers:v3.17.2
rancher/mirrored-calico-ctl:v3.17.2
rancher/mirrored-calico-pod2daemon-flexvol:v3.17.2
rancher/coreos-flannel:v0.13.0-rancher1
weaveworks/weave-kube:2.8.1
weaveworks/weave-npc:2.8.1
rancher/mirrored-pause:3.2
rancher/nginx-ingress-controller:nginx-0.43.0-rancher3
rancher/mirrored-nginx-ingress-controller-defaultbackend:1.5-rancher1
rancher/mirrored-metrics-server:v0.4.1
noiro/cnideploy:5.1.1.0.1ae238a
noiro/aci-containers-host:5.1.1.0.1ae238a
noiro/opflex:5.1.1.0.1ae238a
noiro/openvswitch:5.1.1.0.1ae238a
noiro/aci-containers-controller:5.1.1.0.1ae238a
noiro/gbp-server:5.1.1.0.1ae238a
noiro/opflex-server:5.1.1.0.1ae238a


批量传到私有仓库中
[root@nginx ~]$ for i in $(cat images );do sudo docker push harbor.jettech.com/$i; done

自己使用的

[root@nginx locale]# cat rancher-cluster.yml 
nodes:
  - address: 192.168.1.65
    internal_address: 192.168.1.65
    user: wubo
    role: [controlplane, worker, etcd]
    ssh_key_path: /home/wubo/.ssh/id_rsa
    port: 22
  - address: 172.16.10.59
    internal_address: 172.16.10.59
    user: wubo
    role: [controlplane, worker, etcd]
    ssh_key_path: /home/wubo/.ssh/id_rsa
    port: 22
  - address: 172.16.10.33
    internal_address: 172.16.10.33
    user: wubo
    role: [controlplane, worker, etcd]
    ssh_key_path: /home/wubo/.ssh/id_rsa
    port: 22

services:
  etcd:
    extra_args:
      auto-compaction-retention: 240 #(单位小时)
      quota-backend-bytes: '6442450944'
    backup_config:
      enabled: true         # 设置true启用ETCD自动备份,设置false禁用;
      interval_hours: 12    # 快照创建间隔时间,不加此参数,默认5分钟;
      retention: 6          # etcd备份保留份数;
    snapshot: true
    creation: 6h
    retention: 24h

ingress:
  provider: nginx
  options:
    use-forwarded-headers: "true"
  #hostnetwork: true

cluster_name: local
ignore_docker_version: true
prefix_path: /opt/rke
#kubernetes_version: v1.13.5-rancher1-2 #rke 0.2.2 https://github.com/rancher/rke/releases/tag/v1.1.0
#kubernetes_version: v1.17.4-rancher1-3 #rke 1.1.0
kubernetes_version: v1.20.10-rancher1-1 #rke 1.2.12

network:
  plugin: calico
  mtu: 0
  options:
    flannel_backend_type: vxlan

private_registries:
     - url: harbor.jettech.com
       user: admin
       password: Harbor12345
       is_default: true

3. 证书
  默认情况下,Kubernetes 集群需要用到证书,而 RKE 会自动为所有集群组件生成证书。我使用的是 RKE 自动生成的证书,则直接跳过此步骤。
  您也可以使用 自定义证书 。部署集群后,您可以管理这些自动生成的证书,详情请参考 管理自动生成的证书 。

运行 RKE 部署 kubernetes 集群

[root@nginx locale]# rke up --config rancher-cluster.yml

INFO[0087] [remove/rke-log-cleaner] Successfully removed container on host [172.16.10.59] 
INFO[0087] [remove/rke-log-cleaner] Successfully removed container on host [192.168.1.65] 
INFO[0087] [sync] Syncing nodes Labels and Taints       
INFO[0087] [sync] Successfully synced nodes Labels and Taints 
INFO[0087] [network] Setting up network plugin: calico  
INFO[0087] [addons] Saving ConfigMap for addon rke-network-plugin to Kubernetes 
INFO[0087] [addons] Successfully saved ConfigMap for addon rke-network-plugin to Kubernetes 
INFO[0087] [addons] Executing deploy job rke-network-plugin 
INFO[0092] [addons] Setting up coredns                  
INFO[0092] [addons] Saving ConfigMap for addon rke-coredns-addon to Kubernetes 
INFO[0092] [addons] Successfully saved ConfigMap for addon rke-coredns-addon to Kubernetes 
INFO[0092] [addons] Executing deploy job rke-coredns-addon 
INFO[0097] [addons] CoreDNS deployed successfully       
INFO[0097] [dns] DNS provider coredns deployed successfully 
INFO[0097] [addons] Setting up Metrics Server           
INFO[0097] [addons] Saving ConfigMap for addon rke-metrics-addon to Kubernetes 
INFO[0097] [addons] Successfully saved ConfigMap for addon rke-metrics-addon to Kubernetes 
INFO[0097] [addons] Executing deploy job rke-metrics-addon 
INFO[0102] [addons] Metrics Server deployed successfully 
INFO[0102] [ingress] Setting up nginx ingress controller 
INFO[0102] [ingress] removing admission batch jobs if they exist 
INFO[0102] [addons] Saving ConfigMap for addon rke-ingress-controller to Kubernetes 
INFO[0102] [addons] Successfully saved ConfigMap for addon rke-ingress-controller to Kubernetes 
INFO[0102] [addons] Executing deploy job rke-ingress-controller 
INFO[0107] [ingress] ingress controller nginx deployed successfully 
INFO[0107] [addons] Setting up user addons              
INFO[0107] [addons] no user addons defined              
INFO[0107] Finished building Kubernetes cluster successfully 

在创建 Kubernetes 集群的过程中,会创建一个 kubeconfig 文件,它的文件名称是kube_config_cluster.yml,您可以使用它控制 Kubernetes 集群。

有问题重新执行前先清理一下

在三台 k8s 主机上用 root 权限执行下面命令:

# 防火墙规则清理
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -F# 容器清理
docker system prune -f
docker stop $(docker ps -aq)
docker rm -f $(docker ps -aq)
docker volume rm $(docker volume ls -q)
docker image rm $(docker image ls -q)
rm -rf /etc/ceph \/etc/cni \/etc/kubernetes \/opt/cni \/opt/rke \/run/secrets/kubernetes.io \/run/calico \/run/flannel \/var/lib/calico \/var/lib/etcd \/var/lib/cni \/var/lib/kubelet \/var/lib/rancher/rke/log \/var/log/containers \/var/log/pods \/var/run/calico# 重启服务
systemctl restart docker

六 操作 kubernetes 集群

1. 安装 kubectl(kubernetes 命令行工具)

[root@nginx locale]# kubectl version
Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.6", GitCommit:"8a62859e515889f07e3e3be6a1080413f17cf2c3", GitTreeState:"clean", BuildDate:"2021-04-15T03:28:42Z", GoVersion:"go1.15.10", Compiler:"gc", Platform:"linux/amd64"}
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kube-ca")

2. kubeconfig 文件

2.1 让 kuser(和 root)用户运行 kubectl 命令

root@nginx locale]# cp kube_config_rancher-cluster.yml ~/.kube/config

2.2 使用 kubectl 测试集群节点连通性

[root@nginx locale]# kubectl get nodes
NAME           STATUS   ROLES                      AGE    VERSION
172.16.10.33   Ready    controlplane,etcd,worker   8m5s   v1.20.10
172.16.10.59   Ready    controlplane,etcd,worker   8m5s   v1.20.10
192.168.1.65   Ready    controlplane,etcd,worker   8m5s   v1.20.10

2.3 检查集群 Pod 的运行状况

[root@nginx locale]# kubectl get all -A  

[root@nginx locale]# kubectl get pods -A
NAMESPACE       NAME                                      READY   STATUS      RESTARTS   AGE
ingress-nginx   default-http-backend-565f86f5f9-jql8c     1/1     Running     0          8m7s
ingress-nginx   nginx-ingress-controller-ccwts            1/1     Running     0          8m7s
ingress-nginx   nginx-ingress-controller-f9vh7            1/1     Running     0          8m7s
ingress-nginx   nginx-ingress-controller-jkzp4            1/1     Running     0          8m7s
kube-system     calico-kube-controllers-b486cd75d-xxfwm   1/1     Running     0          8m21s
kube-system     calico-node-2pnfm                         1/1     Running     0          8m20s
kube-system     calico-node-fb9wn                         1/1     Running     0          8m20s
kube-system     calico-node-pfzj8                         1/1     Running     0          8m20s
kube-system     coredns-56fdbbcdfc-m2gs2                  1/1     Running     0          8m17s
kube-system     coredns-56fdbbcdfc-zgvkx                  1/1     Running     0          7m43s
kube-system     coredns-autoscaler-5c64bb75c8-6g6g6       1/1     Running     0          8m16s
kube-system     metrics-server-6b697547fc-xv7xm           1/1     Running     0          8m12s
kube-system     rke-coredns-addon-deploy-job-kmpgw        0/1     Completed   0          8m18s
kube-system     rke-ingress-controller-deploy-job-78db7   0/1     Completed   0          8m8s
kube-system     rke-metrics-addon-deploy-job-zg6tz        0/1     Completed   0          8m13s
kube-system     rke-network-plugin-deploy-job-wjt6m       0/1     Completed   0          8m23s

2.4 扩展 - 其余相关操作

若有以下相关操作,可参考官方文档链接:

  • 管理 kubrnetes 证书
  • 添加或移除节点

七 安装 Helm(Kubernetes 的软件包管理工具)

  • 在 nginx 主机上安装 helm
  • helm 官方参考文档
  • 下载需要的版本
    wget http://rancher-mirror.cnrancher.com/helm/v3.6.3/helm-v3.6.3-linux-amd64.tar.gz
    
    mv linux-amd64/helm  /usr/local/bin/
    
    [root@nginx locale]# helm version
    version.BuildInfo{Version:"v3.6.3", GitCommit:"d506314abfb5d21419df8c7e7e68012379db2354", GitTreeState:"clean", GoVersion:"go1.16.5"}

八 安装 Rancher Helm Chart

Rancher 使用 Kubernetes 的 Helm 软件包管理器安装。Helm Charts 为 Kubernetes YAML 清单文档提供了模板语法。
  有了 Helm,我们可以创建可配置的 Deployment,而不只是使用静态文件。

  • 对于无法直接访问 Internet 的系统,请参阅 Rancher 离线安装 。
  • 选择要安装的 Rancher 版本,请参阅 选择 Rancher 版本 。
  • 要选择用于安装 Rancher 的 Helm 版本,请参阅 Helm 版本要求 。

1 Helm Chart 仓库

Rancher 提供了几种不同的 Helm Chart 仓库供您选择。最新版或稳定版的 Rancher Helm Chart 与用于 Docker 安装的 Rancher 的 Docker 镜像标签对应。因此,rancher-latest 仓库包含被标记为 rancher/rancher:latest 的版本。当 Rancher 版本升级到 rancher/rancher:stable 后,它将被添加到 rancher-stable 仓库中。

类别添加仓库命令仓库描述
rancher-latesthelm repo add rancher-latest https://releases.rancher.com/server-charts/latest添加最新版本的 Rancher 的 Helm Chart 仓库。我们建议使用此仓库来测试新版本的 Rancher。
rancher-stablehelm repo add rancher-stable https://releases.rancher.com/server-charts/stable添加较旧的,稳定的版本的 Rancher 的 Helm Chart 仓库。我们建议将此仓库用于生产环境。
rancher-alphahelm repo add rancher-alpha https://releases.rancher.com/server-charts/alpha添加 alpha 版本的 Rancher 的 Helm Chart 仓库,以预览即将发布的版本. 不建议在生产环境中使用这些版本。我们不支持从 rancher alpha 仓库中的 chart 升级到任何其他版本 chart。

注 意 : rancher-latest 和 rancher-stable Helm Chart 仓库是在 Rancher v2.1.0 后引入的,因此 rancher-stable 仓库包含一些从来没有被标记为 rancher/rancher:stable 标签的 Rancher 版本。在 v2.1.0 之前标记为 rancher/rancher:stable 的 Rancher 版本是 v2.0.4,v2.0.6,v2.0.8。在 v2.1.0 版本之后,rancher-stable 仓库中的所有 charts 将与标记为 stable 的 Rancher 版本对应。
  Rancher Helm Chart 版本必须匹配 Rancher 版本(即 appVersion)。

2 添加 Helm Chart 仓库

高可用安装指南 | Rancher文档

使用 helm repo add 命令添加含有 Rancher Chart 的 Helm Chart 仓库。
  请将命令中的 <CHART_REPO>,替换为 latest,stable 或 alpha。更多信息,请查看选择 Rancher 版本来选择最适合您的仓库。

  • latest: 建议在尝试新功能时使用。
  • stable: 建议在生产环境中使用。(推荐)
  • alpha: 未来版本的实验性预览。
[root@nginx ~]$ helm repo list helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

[root@nginx ~]$ helm repo update
[root@nginx ~]$ helm repo list
NAME          	URL                                              
rancher-stable	https://releases.rancher.com/server-charts/stable


下载本地
[root@nginx ~]$ helm fetch rancher-stable/rancher --version=v2.5.8

3 关于证书

Rancher Server 在默认情况下被设计为安全的,并且需要 SSL/TLS 配置。对于才接触 Rancher 的用户,很多都是卡在了证书的配置上。其实 Rancher 的证书配置非常简单,一共分为以下三种:

  • Rancher 生成的 TLS 证书: 在这种情况下,你需要在集群中安装 cert-manager。 Rancher 利用 cert-manager 签发并维护证书。Rancher 将生成自己的 CA 证书,并使用该 CA 签署证书。然后 cert-manager 负责管理该证书。
  • Let's Encrypt: Let's Encrypt 选项也需要使用 cert-manager。但是,在这种情况下,cert-manager 与 Let's Encrypt 的特殊颁发者相结合,该颁发者执行获取 Let's Encrypt 颁发的证书所需的所有操作(包括请求和验证)。此配置使用 HTTP 验证(HTTP-01),因此负载均衡器必须具有可以从公网访问的公共 DNS 记录。
  • 使用你已有的证书: 此选项使你可以使用自己的权威 CA 颁发的证书或自签名 CA 证书。 Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,你必须上传名称分别为tls.crttls.key的 PEM 格式的证书以及相关的密钥。如果使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。 Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
    • 自签名证书
    • 颁发机构颁发的证书

同时,还支持在 Rancher 外部(通常是指外部的负载均衡器)终止 SSL/TLS,也就是将证书放到 Rancher 外部的负载均衡器上。

注意:如果要在外部终止 SSL/TLS,请参阅在外部负载均衡器上终止 TLS。

设置Chart 选项描述是否需要 cert-manager
Rancher 生成的证书(默认)ingress.tls.source=rancher使用 Rancher 生成的 CA 签发的自签名证书此项为默认选项
Let’s Encryptingress.tls.source=letsEncrypt使用Let's Encrypt颁发的证书
你已有的证书ingress.tls.source=secret使用你的自己的证书(Kubernetes 密文)
重要

Rancher 中国技术支持团队建议你使用“你已有的证书” ingress.tls.source=secret 这种方式,从而减少对 cert-manager 的运维成本。

Rancher 中国技术支持团队建议您使用 “已有的证书” ingress.tls.source=secret 这种方式,从而减少对 cert-manager 的运维成本。

离线环境可用的 Helm Chart 选项#

Chart 选项描述
certmanager.version""根据运行的 cert-manager 版本配置适当的 Rancher TLS 颁发者。
systemDefaultRegistry<REGISTRY.YOURDOMAIN.COM:PORT>配置 Rancher,在创建集群时,Rancher Server 始终从私有镜像仓库中拉取镜像
useBundledSystemCharttrue配置 Rancher Server 使用内置的 system-chart,system-chart中包含监控,日志,告警和全局 DNS 等功能所需的 Chart。这些 Helm charts 位于 GitHub 中,但是由于您处于离线环境中,因此使用 Rancher 中内置的 Chart 比设置一个 Git 镜像简单得多

3. 渲染您的 Rancher Helm 模板

选项 A - 使用  自签名证书且外部TLS方式。本文介绍如何使用**-外部 LB 终止 SSL/TLS 来安装高可用的 Rancher**,更多安装方式,可参考官网文档 12。

3.1  创建自签名证书

1)可通过镜像快速生成自签名证书:参考nginx,ssl,证书和校验-CSDN博客

2)可通过镜像快速生成自签名证书:

docker run --rm -v /root/cert:/opt/certs kingsd/generate-cert:v0.1 --ssl-domain=jettoui.jettech.com

rancher 2.4.5 · helm/rancher-stable 

3.2 使用外部 LB 终止 SSL/TLS 搭建高可用 Rancher

外部 TLS 终止​

我们建议将负载均衡器配置为 4 层均衡,将普通 80/tcp 和 443/tcp 转发到 Rancher Management 集群节点。集群上的 Ingress Controller 会将端口 80 上的 HTTP 流量重定向到端口 443 上的 HTTPS。

你可以在 Rancher 集群(Ingress)外部的 L7 负载均衡器上终止 SSL/TLS。使用 --set tls=external 选项,将负载均衡器指向所有 Rancher 集群节点上的端口 HTTP 80。这将在 HTTP 端口 80 上暴露 Rancher 接口。请注意,允许直接连接到 Rancher 集群的客户端不会被加密。如果你选择这样做,我们建议你将网络级别的直接访问限制为仅你的负载均衡器。

如果你使用的是私有 CA 签名的证书,请添加 --set privateCA=true 并参见添加 TLS 密文 - 使用私有 CA 签名证书,为 Rancher 添加 CA 证书

你的负载均衡器必须支持长期存在的 Websocket 连接,并且需要插入代理头,以便 Rancher 可以正确传送链接。

[root@nginx cert]# helm install  rancher rancher-stable/rancher --create-namespace  --namespace cattle-system --set hostname=jetto.jettech.com --set rancherImage=harbor.jettech.com/rancher/rancher --set rancherImageTag=v2.5.8 --set tls=external  --set replicas=3 --set privateCA=true --set systemDefaultRegistry=harbor.jettech.com

说明:

  • tls=external: 在 Rancher 集群(Ingress)外部的负载均衡器上终止 SSL/TLS
  • hostname:访问 rancher 所需的域名,需要在 dns 中将域名和 nginx 的主机进行映射
  • replicas: replicas 设置 rancher 的副本数为 3,默认是 3
  • privateCA=CA:如果你使用的是私有 CA 签名的证书,请添加 --set privateCA=true
  • systemDefaultRegistry: 设置私有仓
  • rancherImage:镜像
  • rancherImageTag:镜像版本

高可用安装 | Rancher文档

[root@nginx cert]# kubectl get pods -n  cattle-system
NAME                       READY   STATUS              RESTARTS   AGE
rancher-78747dbb68-598db   0/1     ContainerCreating   0          6m
rancher-78747dbb68-726b9   0/1     ContainerCreating   0          6m
rancher-78747dbb68-d5kzh   0/1     ContainerCreating   0          6m
[root@nginx cert]# kubectl describe pods rancher-78747dbb68-598db -n  cattle-system 
Name:                 rancher-78747dbb68-598db
Namespace:            cattle-system
Priority:             1000000000
Priority Class Name:  rancher-critical
Node:                 172.16.10.59/172.16.10.59
Start Time:           Tue, 02 Jan 2024 17:38:02 +0800
Labels:               app=rancher
                      pod-template-hash=78747dbb68
                      release=rancher
Annotations:          <none>
Status:               Pending
IP:                   
IPs:                  <none>
Controlled By:        ReplicaSet/rancher-78747dbb68
Containers:
  rancher:
    Container ID:  
    Image:         harbor.jettech.com/rancher/rancher:v2.5.8
    Image ID:      
    Port:          80/TCP
    Host Port:     0/TCP
    Args:
      --http-listen-port=80
      --https-listen-port=443
      --add-local=true
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Liveness:       http-get http://:80/healthz delay=60s timeout=1s period=30s #success=1 #failure=3
    Readiness:      http-get http://:80/healthz delay=5s timeout=1s period=30s #success=1 #failure=3
    Environment:
      CATTLE_NAMESPACE:                cattle-system
      CATTLE_PEER_SERVICE:             rancher
      CATTLE_SYSTEM_DEFAULT_REGISTRY:  harbor.jettech.com
    Mounts:
      /etc/rancher/ssl/cacerts.pem from tls-ca-volume (ro,path="cacerts.pem")
      /var/run/secrets/kubernetes.io/serviceaccount from rancher-token-wgjr8 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  tls-ca-volume:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  tls-ca
    Optional:    false
  rancher-token-wgjr8:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  rancher-token-wgjr8
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     cattle.io/os=linux:NoSchedule
                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason       Age                   From               Message
  ----     ------       ----                  ----               -------
  Normal   Scheduled    6m1s                  default-scheduler  Successfully assigned cattle-system/rancher-78747dbb68-598db to 172.16.10.59
  Warning  FailedMount  3m58s                 kubelet            Unable to attach or mount volumes: unmounted volumes=[tls-ca-volume], unattached volumes=[tls-ca-volume rancher-token-wgjr8]: timed out waiting for the condition
  Warning  FailedMount  111s (x10 over 6m1s)  kubelet            MountVolume.SetUp failed for volume "tls-ca-volume" : secret "tls-ca" not found
  Warning  FailedMount  102s                  kubelet            Unable to attach or mount volumes: unmounted volumes=[tls-ca-volume], unattached volumes=[rancher-token-wgjr8 tls-ca-volume]: timed out waiting for the condition

发现没有私有证书问题,删除rancher,创建证书

[root@nginx cert]# helm  -n  cattle-system  ls
NAME   	NAMESPACE    	REVISION	UPDATED                                	STATUS  	CHART        	APP VERSION
rancher	cattle-system	1       	2024-01-02 17:38:01.961716845 +0800 CST	deployed	rancher-2.7.9	v2.7.9     
[root@nginx cert]# helm  -n  cattle-system  delete rancher

使用 NGINX v0.25 为外部 TLS 配置 Ingress​

在 NGINX 0.25 中,NGINX 关于转发头和外部 TLS 终止的行为已更改。因此,如果你同时使用 NGINX 0.25 和外部 TLS 终止配置,你必须编辑 cluster.yml 来为 Ingress 启用 use-forwarded-headers 选项。

ingress:
  provider: nginx
  options:
    use-forwarded-headers: 'true'

必须的 Header​

  • Host
  • X-Forwarded-Proto
  • X-Forwarded-Port
  • X-Forwarded-For

建议的超时时间​

  • 读超时:1800 seconds
  • 写超时:1800 seconds
  • 连接超时:30 seconds

 

[root@nginx cert]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 1024;
}
http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 4096;
    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;
    upstream rancher_servers_http {
        least_conn;
        server 192.168.1.65:80 max_fails=3 fail_timeout=5s;
        server 172.16.10.59:80 max_fails=3 fail_timeout=5s;
        server 172.16.10.33:80 max_fails=3 fail_timeout=5s;
    }
    upstream rancher_servers_https {
        least_conn;
        server 192.168.1.65:443 max_fails=3 fail_timeout=5s;
        server 172.16.10.59:443 max_fails=3 fail_timeout=5s;
        server 172.16.10.33:443 max_fails=3 fail_timeout=5s;
    }
    map $http_upgrade $connection_upgrade {
        default Upgrade;
        ''      close;
    }
    server {
        listen       80;
        listen       [::]:80;
        server_name  jetto.jettech.com;
        return 301 https://$server_name$request_uri;
        #location / {
	#	proxy_pass http://rancher_servers_http;
	#}
    }
    server {
        listen       443 ssl http2;
        listen       [::]:443 ssl http2;
        server_name  jetto.jettech.com;
        ssl_certificate "/home/wubo/rancher/cert/ok/tls.crt";
        ssl_certificate_key "/home/wubo/rancher/cert/ok/tls.key";
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Port $server_port;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	    #proxy_pass http://rancher_servers_https;
	    proxy_pass http://rancher_servers_http;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_read_timeout 900s;
            proxy_buffering off;
	}
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/287038.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java经典框架之SpringDataJPA

SpringDataJPA Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. Spring整合Hibernate 2…

解决Gitlab Prometheus导致的磁盘空间不足问题

解决Gitlab Prometheus导致的磁盘空间不足问题 用docker搭建了一个gitlab服务&#xff0c;已经建立了多个项目上传&#xff0c;但是突然有一天就503了。 df -TH查看系统盘&#xff0c;发现已经Used 100%爆满了。。。 &#x1f4a1;Tips&#xff1a;/dev/vda1目录是系统盘目录。…

x-cmd pkg | lazygit - git 命令的终端 UI

目录 简介首次用户功能特点类似工具与竞品进一步探索 简介 lazygit 由 Jesse Duffield 于 2018 年使用 Go 语言构建的 git 终端交互式命令行工具&#xff0c;旨在终端界面中便捷管理 git 存储库。 首次用户 使用 x lazygit 即可自动下载并使用 在终端运行 eval "$(curl …

Qt实现文本编辑器(二)

上一章节讲述了如何制作文本编辑页面&#xff0c;以及应该有哪些功能需要实现&#xff0c;只是做了展示效果&#xff0c;实际的点击事件并没有处理。今天来具体讲解下是如何实现菜单栏以及工具栏上对应的需求吧~ 功能实现 功能&#xff1a; 1、动作消息触发 2、具体功能&am…

vue +elementui 项目登录通过不同账号切换侧边栏菜单的颜色

前景提要&#xff1a;要求不同权限账号登录侧边栏颜色不一样。分为 theme&#xff1a;1代表默认样式&#xff0c;theme:2代表深色主题样式。 1.首先定义一个主题文件 theme.js&#xff0c;定义两个主题样式 // 主要是切换菜单栏和菜单头部主题的设计&#xff0c;整体主题样式切…

electron进程通信之预加载脚本和渲染进程对主进程通信

主进程和预加载脚本通信 主进程 mian,js 和预加载脚本preload.js,在主进程中创建预加载脚本, const createWindow () > {// Create the browser window.const mainWindow new BrowserWindow({width: 300,height: 300,// 指定预加载脚本webPreferences: {preload: path.j…

基于rockpi4b启动流程(2)

uboot启动kernel 基于上篇文章,将开发板烧录loder和system镜像,即可开机进console。 我们将系统停到uboot命令行,printenv看下环境变量 => printenv arch=arm baudrate=1500000 board=evb_rk3399 board_name=evb_rk3399 boot_a_script=load ${devtype} ${devnum}:${di…

闭包,垃圾回收机制

1.垃圾回收机制 当函数执行完毕后,函数内部的变量就会被销毁。 代码&#xff1a; function fn() {var a 10;a;return a;}console.log(fn()); 输出的结果: 11 持续调用的结果: 2.变量的私有化 代码: function fn() {var a 10;return function fn1() {return a;}…

汽车架构解析:python cantools库快速解析arxml

文章目录 前言一、安装cantools二、官方说明文档三、cantools方法1、解析message的属性2、解析pdu中的signals3、根据message查找signals4、报文组成bytes 总结 前言 曾经有拿cantools来解析过dbc&#xff0c;用得比较浅&#xff0c;不知道可以用来解析arxml。最近有个需求需要…

鸿蒙开发第一天

一、开发准备工作 1、开发工具的安装 1&#xff09;下载地址&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/ 2&#xff09;查询API文档链接&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/syscap-00000014080893…

Spring-Retry 重试框架使用

一、Spring-Retry Spring-Retry框架是Spring自带的功能&#xff0c;具备间隔重试、包含异常、排除异常、控制重试频率等特点&#xff0c;是项目开发中很实用的一种框架。 支持手动调用方式和注解方式。 使用需引入下面依赖&#xff1a; <dependency><groupId>o…

css文本溢出处理——单行、多行

日常开发中&#xff0c;经常会遇到需要展示的文本过长&#xff0c;这种情况下&#xff0c;为了提高用户的使用体验&#xff0c;最常见的处理方式就是把溢出的文本显示成省略号。 处理文本的溢出的方式&#xff1a;1&#xff09;单行文本溢出&#xff1b; 2&#xff09;多行文本…

一年中ChatGPT使用情况

介绍 本人是独立开源软件开发者&#xff0c;参与很多项目建设&#xff0c;谈下日常使用情况。 我用了一年多&#xff0c;现在已经离不开&#xff0c;我如指挥家&#xff0c;它是我最忠诚的乐手。 编码 GitHub Copilot&#xff1a;GitHub Copilot是GitHub和OpenAI合作开发的一…

Delphi6函数大全3-SysUtils.pas

Delphi6函数大全3-SysUtils.pas首部 function FindNext(var F: TSearchRec): Integer; $[SysUtils.pas功能 返回继续文件搜索说明 搜索成功则返回0参考 function Windows.FindNextFile例子 <参见FindFirst>━━━━━━━━━━━━━━━━━━━━━首部…

WebStorm 创建一个Vue项目(1)

一、下载并安装WebStorm 步骤一 步骤二 选择激活方式 激活码&#xff1a; I2A0QUY8VU-eyJsaWNlbnNlSWQiOiJJMkEwUVVZOFZVIiwibGljZW5zZWVOYW1lIjoiVU5JVkVSU0lEQURFIEVTVEFEVUFMIERFIENBTVBJTkFTIiwiYXNzaWduZWVOYW1lIjoiVGFvYmFv77yaSkVU5YWo5a625qG25rAIOa0uW3peS9nOWup…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-7Lead Compensator超前补偿器(调节根轨迹)

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-7Lead Compensator超前补偿器&#xff08;调节根轨迹&#xff09; 1. Plot Rootlocus 绘制根轨迹2. System Performance 系统表现3. 改善/加快收敛速度4. 超前补偿器 Lead Compe…

基于多反应堆的高并发服务器【C/C++/Reactor】(中)主线程给子线程添加任务以及如何处理该任务

在看此篇文章&#xff0c;建议先看我的往期文章&#xff1a; 基于多反应堆的高并发服务器【C/C/Reactor】&#xff08;中&#xff09;在EventLoop的任务队列中添加新任务-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/135346492?spm1001.2014.3001.5501一…

计算机毕业论文内容参考|基于智能搜索引擎的图书管理系统的设计与实现

文章目录 摘要前言绪论课题背景国内外现状与趋势课题内容相关技术与方法介绍系统分析系统设计系统实现系统测试总结与展望摘要 本文介绍了基于智能搜索引擎的图书管理系统的设计与实现。该系统旨在提供一个高效、智能化的图书管理平台,帮助用户更快、更准确地找到所需的图书资…

python统计分析——直方图(plt.hist)

使用matplotlib.pyplot.hist()函数绘制直方图 from matplotlib.pyplot as pltdata_setnp.array([2,3,3,4,4,4,4,5,5,6]) plt.hist(fish_data) 下面介绍plt.hist()函数中常用的几个重要参数&#xff08;参数等号后为默认设置&#xff09;&#xff1a; &#xff08;1&#xff0…

linux下超级程序!在linux界面实现类图像化界面的操作体验!

linux下超级程序&#xff01;在linux界面实现类图像化界面的操作体验&#xff01; 本期带来一个超级程序&#xff01;在linux界面实现类图像化界面的操作体验。具体功能代码如下: 1500行完整代码想要完成部署&#xff0c;只需在本地创建一个LinuxGJ.sh的文件&#xff0c;然后…