RKE安装k8s及部署高可用rancher,证书在外面的LB(nginx中)

news2024/11/19 20:24:29

一 了解 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 Helm Chart 选项 | Rancher 

rancher 2.4.5 · helm/rancher-stable

3.2 使用外部 LB 终止 SSL/TLS 搭建高可用 Rancher
1)外部 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 bootstrapPassword=123456aA --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 --set useBundledSystemChart=true




[root@nginx locale]#
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}'
123456aA

说明:

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

常用选项​

选项默认值描述
bootstrapPassword" "string - 为第一个管理员用户设置引导密码。登录后,管理员需要重置密码。如不设置,会使用随机生成的引导密码。
hostname" "string - 你的 Rancher Server 的完全限定的域名(FQDN)
ingress.tls.source"rancher"string - 从哪里获取 Ingress 的证书- "rancher, letsEncrypt, secret"
letsEncrypt.email" "string - 你的邮箱地址
letsEncrypt.environment"production"string - 可选项:"staging, production"
privateCAfalsebool - 如果你的证书是由私有 CA 签发的,把这个值设置为 true

 

高级选项​

选项默认值描述
additionalTrustedCAsfalsebool - 请参见额外的授信 CA
addLocal"true"string - 让 Rancher 检测并导入 “local” Rancher Server 集群。注意:此选项在 2.5.0 中已不可用。你可考虑使用 restrictedAdmin 选项,来避免用户修改本地集群。
antiAffinity"preferred"string - Rancher Pod 的反亲和性规则 - "preferred, required"
auditLog.destination"sidecar"string - 发送审计日志到 Sidecar 容器的控制台或 hostPath 卷 - "sidecar, hostPath"
auditLog.hostPath"/var/log/rancher/audit"string - 主机上的日志文件目标地址(仅当auditLog.destination 的值是 hostPath 时生效)
auditLog.level0int - 设置 API 审计日志等级。0 代表关闭。[0-3]
auditLog.maxAge1int - 旧审计日志文件最多可保留的天数(仅当auditLog.destination 的值是 hostPath 时生效)
auditLog.maxBackup1int - 审计文件最大可保留的个数(仅当 auditLog.destination 的值是 hostPath 时生效)
auditLog.maxSize100int - 在审计日志被轮换前的最大容量,单位是 MB(仅当 auditLog.destination 的值是 hostPath 时生效)
auditLog.image.repository"registry.suse.com/bci/bci-micro"string - 用于收集审计日志的镜像的位置。
auditLog.image.tag"15.4.14.3"string - 用于收集审计日志的镜像的标签。
auditLog.image.pullPolicy"IfNotPresent"string - 覆盖 auditLog 镜像的 imagePullPolicy - “Always”、“Never”、“IfNotPresent”。
busyboxImage""string - 用于收集审计日志的 busybox 镜像位置。注意:此选项已弃用,请使用 auditLog.image.repository 来控制审计 sidecar 镜像
certmanager.version""string - 设置 cert-manager compatibility
debugfalsebool - 在 Rancher Server 设置 debug 参数
extraEnv[]list - 为 Rancher 额外设置环境变量
imagePullSecrets[]list - 私有镜像仓库凭证的密文名称列表
ingress.configurationSnippet""string - 添加额外的 Nginx 配置。可用于代理配置。
ingress.extraAnnotations{}map - 用于自定义 Ingress 的额外注释
ingress.enabledtrue如果值为 false,Helm 不会安装 Rancher Ingress。你可把值设为 false 以部署你自己的 Ingress。
letsEncrypt.ingress.class""string - cert-manager acmesolver ingress 的可选 ingress 类,用于响应 Let's Encrypt ACME 质询。选项:traefik,nginx。
noProxy"127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.svc,.cluster.local,cattle-system.svc"string - 不使用代理的主机名或 IP 地址的逗号分隔列表
proxy""string - 给 Rancher 配置的 HTTP[S] 代理
rancherImage"rancher/rancher"string - Rancher 镜像源
rancherImagePullPolicy"IfNotPresent"string - 覆盖 Rancher Server 镜像的 imagePullPolicy - "Always", "Never", "IfNotPresent"
rancherImageTag和 Chart 版本一致string - rancher/rancher 镜像标签
replicas3int - Rancher Server 副本数。如果设为 -1,会根据集群中的可用节点数自动选择 1,2或3。
resources{}map - Rancher Pod 资源请求和限制
restrictedAdminfalsebool - 如果值为 true,初始的 Rancher 用户访问本地 Kubernetes 集群会受到限制,以避免权限升级。详情请参见 restricted-admin 角色。
systemDefaultRegistry""string - 用于所有系统容器镜像的私有仓库,例如 http://registry.example.com/
tls"ingress"string - 详情请参见外部 TLS 终止。- "ingress, external"
useBundledSystemChartfalse配置 Rancher Server 使用内置的 system-chart,system-chart中包含监控,日志,告警和全局 DNS 等功能所需的 Chart。这些 Helm charts 位于 GitHub 中,但是由于您处于离线环境中,因此使用 Rancher 中内置的 Chart 比设置一个 Git 镜像简单得多
global.cattle.psp.enabledtruebool - 使用 Rancher v2.7.2-v2.7.4 时,选择 false 以禁用 Kubernetes v1.25 及更高版本的 PSP。使用 Rancher v2.7.5 及更高版本时,Rancher 会尝试检测集群是否运行不支持 PSP 的 Kubernetes 版本,如果确定集群不支持 PSP,则将默认 PSP 的使用设置为 false。你仍然可以通过显式提供此值的 true 或 false 来手动覆盖此值。在支持 PSP 的集群中(例如使用 Kubernetes v1.24 或更低版本的集群),Rancher 仍将默认使用 PSP。

高可用安装 | 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
2) 发现没有私有证书问题,删除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

 3)创建namespace和秘钥证书

[root@nginx ok]# kubectl create namespace cattle-system
namespace/cattle-system created
[root@nginx ok]# kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=./cacerts.pem
secret/tls-ca created
[root@nginx ok]# kubectl get ns
NAME              STATUS   AGE
cattle-system     Active   9s
default           Active   16h
ingress-nginx     Active   16h
kube-node-lease   Active   16h
kube-public       Active   16h
kube-system       Active   16h
[root@nginx ok]# kubectl get secret -n cattle-system 
NAME                  TYPE                                  DATA   AGE
default-token-gwz5t   kubernetes.io/service-account-token   3      22s
tls-ca                Opaque                                1      17s
[root@nginx ok]# kubectl get secret -n cattle-system

4) 再次执行

[root@nginx cert]# helm install  rancher rancher-stable/rancher --create-namespace  --namespace cattle-system --set hostname=jetto.jettech.com --set bootstrapPassword=123456aA --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 --set useBundledSystemChart=true




[root@nginx locale]#
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}'
123456aA

5)验证 Rancher Server 是否已成功部署

[root@nginx locale]# kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 2 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
[root@nginx locale]# kubectl -n cattle-system rollout status deploy/rancher
[root@nginx locale]# kubectl -n cattle-system rollout status deploy/rancher
deployment "rancher" successfully rolled out

或
[root@nginx locale]# kubectl -n cattle-system get deploy rancher
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
rancher   3/3     3            3           2m27s



[root@nginx locale]# helm -n cattle-system ls -a
NAME           	NAMESPACE    	REVISION	UPDATED                                	STATUS  	CHART                  	APP VERSION
rancher        	cattle-system	1       	2024-01-03 09:44:58.663664777 +0800 CST	deployed	rancher-2.7.9          	v2.7.9     
rancher-webhook	cattle-system	1       	2024-01-03 01:46:00.056403121 +0000 UTC	deployed	rancher-webhook-0.1.000	0.1.0

 

4 安装 LB,使用 NGINX  为外部 TLS 配置 Ingress​

在 NGINX  中,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

要在外部的负载均衡器终止 TLS 证书,需要将证书配置在外部的负载均衡器中。

官网

worker_processes 4;
worker_rlimit_nofile 40000;

events {
    worker_connections 8192;
}

http {
    upstream rancher {
        server IP_NODE_1:80;
        server IP_NODE_2:80;
        server IP_NODE_3:80;
    }

    map $http_upgrade $connection_upgrade {
        default Upgrade;
        ''      close;
    }

    server {
        listen 443 ssl http2;
        server_name FQDN;
        ssl_certificate /certs/fullchain.pem;
        ssl_certificate_key /certs/privkey.pem;

        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;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            # 此项允许执行的 shell 窗口保持开启,最长可达15分钟。不使用此参数的话,默认1分钟后自动关闭。
            proxy_read_timeout 900s;
            proxy_buffering off;
        }
    }

    server {
        listen 80;
        server_name FQDN;
        return 301 https://$server_name$request_uri;
    }
}

本人的: 

[root@nginx cert]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes 4;
worker_rlimit_nofile 40000;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
    worker_connections 10240;
}
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;
            # 此项允许执行的 shell 窗口保持开启,最长可达15分钟。不使用此参数的话,默认1分钟后自动关闭。
            proxy_read_timeout 900s;
            proxy_buffering off;
	}
    }
}

效果图:

Rancher 高可用安装--使用外部 LB 终止 SSL/TLS - 权威教程 - Rancher 中文论坛 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue Cli inspect

Vue Cli inspect vue-cli-service inspect&#xff1a;可以使用 vue-cli-service inspect 来审查一个 Vue CLI 项目的 webpack config 使用方法&#xff1a; 1、输出在控制台&#xff1a;vue-cli-service inspect 2、输在在文件中&#xff1a;vue-cli-service inspect -->…

阿里云迁移AWS视频点播技术攻坚

文章目录 &#x1f437; 背景&#x1f9a5; 简述&#x1f425; Aws服务&#x1f99c; AWS CloudFormation&#x1f41e; 问题&#x1f409; 落地方案&#x1f989; Aws vs Aliyun&#x1f344; 避坑指南 &#x1f437; 背景 由于AWS整体成本略低于阿里云&#xff0c;公司决定将…

k8s集群部署Harbor镜像仓库

部署k8s集群参考 https://blog.csdn.net/m0_59933574/article/details/134936188?spm1001.2014.3001.5502https://blog.csdn.net/m0_59933574/article/details/134936188?spm1001.2014.3001.5502 安装Harbor 准备一台干净服务器&#xff0c;关闭防火墙与selinux 下载dock…

rime中州韵 inputShow lua Filter

在 rime中州韵 inputShow lua Translator 一文中&#xff0c;我们通过 inputShow.lua 定制了 inputShow_translator&#xff0c;这使得我们的输入方案可以将用户输入的字符透传到候选列表中来。如下&#x1f447;&#xff1a; &#x1f446;上图中我们在候选列表中看到了 inpu…

C# WinForm MessageBox自定义按键文本 COM组件版

c# 更改弹窗MessageBox按钮文字_c# messagebox.show 字体-CSDN博客 需要用到大佬上传到百度云盘的Hook类&#xff0c;在大佬给的例子的基础上改动了点。 应用时自己加GUID和ProgID。 组件实现&#xff1a; using System; using System.Collections.Generic; using System.L…

Flink Watermark和时间语义

Flink 中的时间语义 时间语义&#xff1a;EventTime&#xff1a;事件创建时间&#xff1b;Ingestion Time&#xff1a;数据进入 Flink 的时间&#xff1b;Processing Time&#xff1a;执行操作算子的本地系统时间&#xff0c;与机器无关。不同的时间语义有不同的应用场合&#…

MySQL之四大引擎、建库建表以及账号管理

目录 一.四大引擎 1.1 InnoDB 1.2 MyISAM 1.3 MEMORY 1.4 Archive 二.数据库管理 2.1 元数据库简介 2.2 元数据库分类 2.3 数据库的增删改查及使用 2.4 MySQL库权限相关 三.数据表管理 3.1 三大范式 3.2 基本数据类型 3.2.1 优化原则 3.2.2 分类 四.数据库账号管理 4.1 相同…

LabVIEW在高精度机器人视觉定位系统中的应用

在现代工业自动化中&#xff0c;精确的机器人视觉定位系统对于提高生产效率和产品质量至关重要。LabVIEW软件&#xff0c;以其卓越的图像处理和自动化控制功能&#xff0c;在这一领域发挥着重要作用。本案例将展示LabVIEW如何帮助开发和实现一个高精度的机器人视觉定位系统&…

【WPF.NET开发】WPF中的输入

本文内容 输入 API事件路由处理输入事件文本输入触摸和操作侧重点鼠标位置鼠标捕获命令输入系统和基元素 Windows Presentation Foundation (WPF) 子系统提供了一个功能强大的 API&#xff0c;用于从各种设备&#xff08;包括鼠标、键盘、触摸和触笔&#xff09;获取输入。 本…

easycython和cython将py编译为pyd对比

前提了解 为了实验的准确性,在全过程使用的python环境版本都为同一版本 easycython和cython编译为pyd文件的不同在于,easycython编译的原始文件后缀为pyx,cython编译的原始文件为py 1.cython 1.1原始文件 def ZWHCythonTest():print("Z_W_H_") def ZWHCython…

C语言数组习题

1.数组遍历 #include <stdio.h>int main(){int i,a[10];for(i0;i<9;i) //对数组元素a[0]~a[9]赋值 a[i]i;for(i9;i>0;i--) //输出a[9]~a[0]共10个数组元素 printf("%d ",a[i]);printf("\n");return 0;} 运行结果&#xff1a; 2.数组应用&a…

IOS - 手机安装包 ipa 常见几种方式

安装 ipa 包的方法有很多中&#xff0c;可以通过不同的软件安装&#xff0c;本文只列出了常用的几种&#xff0c;做个简单的归纳整理 1、iTunes 安装 数据线连接手机之后&#xff0c;会自动连接iTunes&#xff0c;&#xff08;第一次连接的时候会提示是否信任此电脑&#xff0…

Git管理项目

大家好我是苏麟 , 今天和大家聊聊用Git管理项目 . 一步一步上传到Git仓库 . 1.找到VCS点击创建Git仓库 2.点击目录 3.点击绿色对号提交 4.点击提交 5.点击提交 6.成功提交到本地 7.打开GitLab 或 Gitee 或 GitHub 并创建项目 (注意 : 这里一定是什么都没有的) 否则一会上传是…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-9PID控制器

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-9PID控制器&#xff09; P —— Proportional I —— Integral D —— Derivative 当前误差/过去误差/误差的变化趋势 K p ⋅ e K_{\mathrm{p}}\cdot e Kp​⋅e&#xff1a;比…

挑战 ChatGPT 和 Google Bard 的防御

到目前为止&#xff0c;科学家已经创建了基于人工智能的聊天机器人&#xff0c;可以帮助内容生成。我们还看到人工智能被用来创建像 WormGPT 这样的恶意软件&#xff0c;尽管地下社区对此并不满意。但现在正在创建聊天机器人&#xff0c;可以使用生成人工智能通过即时注入活动来…

论文笔记:CellSense: Human Mobility Recovery via Cellular Network Data Enhancement

1 intro 1.1 背景 1.1.1 蜂窝计费记录&#xff08;CBR&#xff09; 人类移动性在蜂窝网络上的研究近些年得到了显著关注&#xff0c;这主要是因为手机的高渗透率和收集手机数据的边际成本低蜂窝服务提供商收集蜂窝计费记录&#xff08;CBR&#xff09;用于计费目的&#xf…

利用提示工程,提升LLM将自然语言转化为SQL的准确性

大型语言模型 (LLM) 已展现出理解自然语言提示并生成连贯响应的卓越能力。 这为将自然语言翻译成 SQL 等结构化查询语言开辟了新的可能性。 过去&#xff0c;编写 SQL 查询需要技术专业知识&#xff0c;而LLM允许任何人用简单的英语描述他们想要的内容&#xff0c;并自动生成相…

Github 2024-01-03 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-01-03统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目3TypeScript项目3Jupyter Notebook项目1Dart项目1C项目1Rust项目1 系统设计指南 创建周期&#x…

STC进阶开发(三)蜂鸣器、RTC时钟、I2C总线、外部中断、RTC闹钟设置、RTC计时器设置

前言 这一期我们首先学习如何让蜂鸣器响起来&#xff0c;并且如何让蜂鸣器发出简单的歌曲&#xff0c;然后我们介绍RTC时钟&#xff0c;要想明白RTC时钟&#xff0c;我们还需要先介绍I2C总线和外部中断。接下来就开始这一期的学习吧&#xff01; 蜂鸣器 简单介绍 蜂鸣器是一种…

geemap学习笔记039:分析地理空间数据--合成无云影像

前言 本节介绍的内容是对于众多的原始Landsat数据&#xff0c;利用ee.Algorithms.Landsat.simpleComposite()将其处理为TOA数据&#xff0c;并且合成无云影像。 1 导入库并显示地图 import ee import geemap ee.Initialize()2 无云影像合成 Map geemap.Map()collection e…