Rancher 系列文章-RHEL7.8 离线有代理条件下安装单节点 Rancher

news/2024/7/7 23:50:39

一 基础信息

1.1 前提

  1. 本次安装的为 20220129 最新版:Rancher v2.6.3
  2. VM 版本为 RHEL 7.8, 7.9 或 8.2, 8.3, 8.4(Rancher 官网要求)
  3. VM YUM 仓库:已配置对应版本的 RHEL 和 EPEL YUM 仓库
  4. VM 提供 root 权限
  5. 已配置 ntp(防止因为时间不一致导致的诡异问题)
  6. 提供 Proxy 访问互联网 Rancher 相关域名;
  7. 端口要求,为了正常运行,Rancher 需要在 Rancher 节点和下游 Kubernetes 集群节点上开放一些端口。端口需求列出了不同集群类型的 Rancher 和下游集群的所有必要端口。具体如下表:

Rancher 节点的入站规则

协议端口目的描述
TCP80客户端,操作机Rancher 节点使用外部 SSL 终端时的 Rancher UI/API
TCP443客户端,操作机,所有 K3S 节点Rancher 节点Rancher agent,Rancher UI/API,kubectl

Rancher 节点的出站规则

协议端口目的描述
TCP22Rancher 节点所有 K3S 节点使用 Node Driver 对节点进行 SSH 配置
TCP2376Rancher 节点所有 K3S 节点Docker Machine 使用的 Docker daemon TLS 端口
TCP6443Rancher 节点K3S ServerKubernetes API server

✅ 成功:

如果以上前期条件均已满足。

即可以通过「离线 - 有代理」方式进行安装。

1.2 VM 信息

ℹ️ 信息:

OS 配置 Proxy 过程略

1.2 Proxy 信息

ftp_proxy="http://192.168.0.1:8080"
http_proxy="http://192.168.0.1:8080"
https_proxy="http://192.168.0.1:8080"
Rancher 源

🧠 评论:

以上的 allowed domain 可能不全,需要进一步补充。

二 「离线 - 有代理」方式安装

🧠 评论:

本次环境为:离线,有代理。

通过代理安装部署。

假设 Rancher 所在主机 IP 地址为:192.168.0.100

2.1 Rancher 安装配置

2.1.1 安装配置 Docker 及 docker-compose

RHEL 7.8 安装命令如下:

# sudo -i
# yum install -y docker docker-compose

# systemctl status docker
# systemctl enable docker
# systemctl start docker

ℹ️ 信息:

Docker 版本为:1.13,安装后带了 3 个和 docker 有关的 service:

# systemctl list-unit-files|grep docker
docker-cleanup.service                        disabled
docker-storage-setup.service                  disabled
docker.service                                disabled
docker-cleanup.timer                          disabled

docker.service 目录是:/usr/lib/systemd/system/docker.service

docker-compose version 1.18.0, build 8dd22a9

RHEL registries.conf 配置:

配置 insecure-registry:

vi /etc/containers/registries.conf
[registries.search]
registries = ['registry.cn-hangzhou.aliyuncs.com', 'registry.access.redhat.com', 'registry.redhat.io', 'docker.io']

[registries.insecure]
registries = []

[registries.block]
registries = []

Docker 配置 Proxy(可选配置,建议配置来保障 docker 100% 使用代理)[1]:

首先创建配置文件:

# mkdir -p /usr/lib/systemd/system/docker.service.d/
# vi /usr/lib/systemd/system/docker.service.d/http-proxy.conf

然后添加配置:

[Service]
Environment="HTTP_PROXY=http://192.168.0.1:8080"
Environment="HTTPS_PROXY=http://192.168.0.1:8080"
Environment="NO_PROXY=localhost,127.0.0.1,0.0.0.0,192.168.0.100,10.109.205.245,cattle-system.svc,.svc,.cluster.local,example.com"

最后重启容器并验证:

# systemctl daemon-reload
# systemctl restart docker
# systemctl show docker --property Environment

🧠 评论:

Linux NO_PROXY CIDR 方式配置不生效,只有 IP 地址会生效。

2.1.2 生成 100 年有效期的证书

🧠 评论:

df -h 查看文件系统,如下:

# df -h
Filesystem                 Size  Used Avail Use% Mounted on
...
/dev/mapper/rhel-root       67G  5.5G   62G   9% /
...
/dev/mapper/vgdata-lvdata  100G   33M  100G   1% /data
...

/data 目录 100G,所以 rancher 安装在 /data/rancher 目录下。

vi create_self-signed-cert.sh
#!/bin/bash -e

help ()
{
    echo  ' ================================================================ '
    echo  ' --ssl-domain: 生成 ssl 证书需要的主域名,如不指定则默认为 www.rancher.local,如果是 ip 访问服务,则可忽略;'
    echo  ' --ssl-trusted-ip: 一般 ssl 证书只信任域名的访问请求,有时候需要使用 ip 去访问 server,那么需要给 ssl 证书添加扩展 IP,多个 IP 用逗号隔开;'
    echo  ' --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(SSL_TRUSTED_DOMAIN), 多个扩展域名用逗号隔开;'
    echo  ' --ssl-size: ssl 加密位数,默认 2048;'
    echo  ' --ssl-cn: 国家代码 (2 个字母的代号), 默认 CN;'
    echo  ' 使用示例:'
    echo  ' ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com \ '
    echo  ' --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650'
    echo  ' ================================================================'
}

case "$1" in
    -h|--help) help; exit;;
esac

if [[ $1 == '' ]];then
    help;
    exit;
fi

CMDOPTS="$*"
for OPTS in $CMDOPTS;
do
    key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
    value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
    case "$key" in
        --ssl-domain) SSL_DOMAIN=$value ;;
        --ssl-trusted-ip) SSL_TRUSTED_IP=$value ;;
        --ssl-trusted-domain) SSL_TRUSTED_DOMAIN=$value ;;
        --ssl-size) SSL_SIZE=$value ;;
        --ssl-date) SSL_DATE=$value ;;
        --ca-date) CA_DATE=$value ;;
        --ssl-cn) CN=$value ;;
    esac
done

# CA 相关配置
CA_DATE=${CA_DATE:-3650}
CA_KEY=${CA_KEY:-cakey.pem}
CA_CERT=${CA_CERT:-cacerts.pem}
CA_DOMAIN=cattle-ca

# ssl 相关配置
SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf}
SSL_DOMAIN=${SSL_DOMAIN:-'www.rancher.local'}
SSL_DATE=${SSL_DATE:-3650}
SSL_SIZE=${SSL_SIZE:-2048}

## 国家代码 (2 个字母的代号), 默认 CN;
CN=${CN:-CN}

SSL_KEY=$SSL_DOMAIN.key
SSL_CSR=$SSL_DOMAIN.csr
SSL_CERT=$SSL_DOMAIN.crt

echo -e "\033[32m ---------------------------- \033[0m"
echo -e "\033[32m       | 生成 SSL Cert |       \033[0m"
echo -e "\033[32m ---------------------------- \033[0m"

if [[ -e ./${CA_KEY} ]]; then
    echo -e "\033[32m ====> 1. 发现已存在 CA 私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 \033[0m"
    mv ${CA_KEY} "${CA_KEY}"-bak
    openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
else
    echo -e "\033[32m ====> 1. 生成新的 CA 私钥 ${CA_KEY} \033[0m"
    openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
fi

if [[ -e ./${CA_CERT} ]]; then
    echo -e "\033[32m ====> 2. 发现已存在 CA 证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 \033[0m"
    mv ${CA_CERT} "${CA_CERT}"-bak
    openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
else
    echo -e "\033[32m ====> 2. 生成新的 CA 证书 ${CA_CERT} \033[0m"
    openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
fi

echo -e "\033[32m ====> 3. 生成 Openssl 配置文件 ${SSL_CONFIG} \033[0m"
cat > ${SSL_CONFIG} <<EOM
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, serverAuth
EOM

if [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} || -n ${SSL_DOMAIN} ]]; then
    cat >> ${SSL_CONFIG} <<EOM
subjectAltName = @alt_names
[alt_names]
EOM
    IFS=","
    dns=(${SSL_TRUSTED_DOMAIN})
    dns+=(${SSL_DOMAIN})
    for i in "${!dns[@]}"; do
      echo DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}
    done

    if [[ -n ${SSL_TRUSTED_IP} ]]; then
        ip=(${SSL_TRUSTED_IP})
        for i in "${!ip[@]}"; do
          echo IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}
        done
    fi
fi

echo -e "\033[32m ====> 4. 生成服务 SSL KEY ${SSL_KEY} \033[0m"
openssl genrsa -out ${SSL_KEY} ${SSL_SIZE}

echo -e "\033[32m ====> 5. 生成服务 SSL CSR ${SSL_CSR} \033[0m"
openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} -subj "/C=${CN}/CN=${SSL_DOMAIN}" -config ${SSL_CONFIG}

echo -e "\033[32m ====> 6. 生成服务 SSL CERT ${SSL_CERT} \033[0m"
openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT} \
    -CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT} \
    -days ${SSL_DATE} -extensions v3_req \
    -extfile ${SSL_CONFIG}

echo -e "\033[32m ====> 7. 证书制作完成 \033[0m"
echo
echo -e "\033[32m ====> 8. 以 YAML 格式输出结果 \033[0m"
echo "----------------------------------------------------------"
echo "ca_key: |"
cat $CA_KEY | sed 's/^/  /'
echo
echo "ca_cert: |"
cat $CA_CERT | sed 's/^/  /'
echo
echo "ssl_key: |"
cat $SSL_KEY | sed 's/^/  /'
echo
echo "ssl_csr: |"
cat $SSL_CSR | sed 's/^/  /'
echo
echo "ssl_cert: |"
cat $SSL_CERT | sed 's/^/  /'
echo

echo -e "\033[32m ====> 9. 附加 CA 证书到 Cert 文件 \033[0m"
cat ${CA_CERT} >> ${SSL_CERT}
echo "ssl_cert: |"
cat $SSL_CERT | sed 's/^/  /'
echo

echo -e "\033[32m ====> 10. 重命名服务证书 \033[0m"
echo "cp ${SSL_DOMAIN}.key tls.key"
cp ${SSL_DOMAIN}.key tls.key
echo "cp ${SSL_DOMAIN}.crt tls.crt"
cp ${SSL_DOMAIN}.crt tls.crt
chmod +x create_self-signed-cert.sh

生成 100 年证书:

./create_self-signed-cert.sh --ssl-trusted-ip=192.168.0.100 --ssl-date=3650

证书重命名(为了符合 rancher docker 安装对证书的要求):

# cp tls.crt cert.pem
# cp tls.key key.pem

2.1.3 安装 Rancher

通过 docker-compose 方式启动,方便通过文件形式查看相关配置。

# vi docker-compose.yml

Yaml 配置参考了这里[2]和这里[3]

version: '3.3'
services:
    rancher:
        restart: unless-stopped
        ports:
            - '80:80'
            - '443:443'
        environment:
            - 'HTTP_PROXY=http://192.168.0.1:8080'
            - 'HTTPS_PROXY=http://192.168.0.1:8080'
            - 'NO_PROXY=localhost,127.0.0.1,0.0.0.0,192.168.0.100,cattle-system.svc,.svc,.cluster.local,example.com'
            - CATTLE_TLS_MIN_VERSION=1.0
            - SSL_CERT_DIR="/etc/rancher/ssl"
            - AUDIT_LEVEL=1
            - CATTLE_SYSTEM_DEFAULT_REGISTRY=registry.cn-hangzhou.aliyuncs.com
        volumes:
            - '/data/rancher:/var/lib/rancher'
            - '/data/rancher/certs/cert.pem:/etc/rancher/ssl/cert.pem'
            - '/data/rancher/certs/key.pem:/etc/rancher/ssl/key.pem'
            - '/data/rancher/certs/cacerts.pem:/etc/rancher/ssl/cacerts.pem'
            - '/data/rancher/log/auditlog:/var/log/auditlog'
        privileged: true
        image: 'registry.cn-hangzhou.aliyuncs.com/rancher/rancher:v2.6.3'

启动 rancher:

# docker-compose up -d

可以通过以下命令查看启动日志:

# docker-compose logs -f

启动后,通过浏览器访问:https://192.168.0.100/,第一次显示如下:

Rancher bootstrap 密码

在 terminal 中按照要求输入如下命令获取 bootstrap password:

# docker logs  rancher_rancher_1  2>&1 | grep "Bootstrap Password:"
2022/01/29 07:56:10 [INFO] Bootstrap Password: 
...

并把该密码输入到输入框中,随后会生成一个 admin 密码,如下:

Rancher 安装 - Admin 密码

勾选I agree...,点击 Continue 进入 rancher 首页,如下图:

Rancher 首页

至此 Rancher 安装完成。

2.1.4 Rancher 中国区优化配置

使用码云代替 Github

Rancher 默认使用 Github 上的 repo 作为 Chart 仓库的 URL,如果出现 timeout 情况,可以将 Chart 仓库 URL 替换成码云的地址。

每个 repo 的对应关系如下:

应用商店地址RANCHER REPO 地址GITEE 地址
https://git.rancher.io/helm3-chartsGitHub - rancher/helm3-chartshelm3-charts: 精选的Rancher 2.0增强版Helm 3 charts
https://git.rancher.io/chartsGitHub - rancher/chartshttps://gitee.com/rancher/charts
https://git.rancher.io/system-chartsGitHub - rancher/system-chartshttps://gitee.com/rancher/system-charts

那么如何修改 Chart 仓库 URL 呢?

  1. 首页点击左上角汉堡菜单,选择「管理集群」->「Advanced」-> 「Chart 仓库」
  2. 点击列表右侧的省略号 -> Edit
  3. 将 Chart 仓库 URL 替换成码云中的地址即可,点击 Save
  4. 此时,对应的 Chart 仓库的状态变为 Refreshed,等待其变为 Active 之后即可正常使用

修改后如下:

修改 Chart 仓库


http://lihuaxi.xjx100.cn/news/1358554.html

相关文章

深入篇【C++】谈vector中的深浅拷贝与迭代器失效问题

深入篇【C】谈vector中的深浅拷贝与迭代器失效问题 Ⅰ.深浅拷贝问题1.内置类型深拷贝2.自定义类型深拷贝 Ⅱ.迭代器失效问题1.内部迭代器失效2.外部迭代器失效 Ⅰ.深浅拷贝问题 1.内置类型深拷贝 浅拷贝是什么意思&#xff1f;就是单纯的值拷贝。 浅拷贝的坏处&#xff1a; ①…

【Linux】VMware 安装 Centos7 超详细

1、下载✈ VMware链接&#xff1a;https://pan.baidu.com/s/1DnleWeV-JHjZiV9_ENwFmg?pwdb1tj 提取码&#xff1a;b1tj 阿里云镜像&#xff1a;centos安装包下载_开源镜像站-阿里云 CentOS官网镜像&#xff1a; Download 2、虚拟机准备 2.1、打开VMware选择新建虚拟机…

创新创业项目申报管理系统vue+nodejs+mysql

开发语言 node.js 框架&#xff1a;Express 前端:Vue.js 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;VScode 本站是一个B/S模式系统&#xff0c;采用nodejs框架&#xff0c;MYSQL数据库设计开发&#xff0c;充分保证系统的稳定性。系统具有界…

C语言小项目——通讯录高阶(文件管理版)

通讯录初阶: 点这里 通讯录中阶: 点这里 文件管理版本改进之处通讯录初始化退出通讯录并保存 完整代码contact.hcontact.ctest.c 文件管理版本改进之处 通讯录初始化 contact.c 退出通讯录并保存 test.c contact.c contact.h 完整代码 contact.h #pragma once#include&l…

数据库信息速递 MONGODB 6.0 的新特性,更多的查询函数,加密查询,与时序数据集合 (译)...

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到3群&#xff08;共…

p2p大豆计数模型

前面学习了一下论文&#xff1a;Improved Field-Based Soybean Seed Counting and Localization with Feature Level Considered 论文链接&#xff1a;https://spj.science.org/doi/10.34133/plantphenomics.0026 解读链接&#xff1a;论文阅读--考虑特征水平的改进的基于田间…

stable diffusion webui mov2mov

手把手教你用stable diffusion绘画ai插件mov2mov生成动画_哔哩哔哩_bilibili手把手教你用stable diffusion绘画ai插件mov2mov生成动画, 视频播放量 14552、弹幕量 3、点赞数 275、投硬币枚数 114、收藏人数 980、转发人数 75, 视频作者 懂你的冷兮, 作者简介 科技改变世界&…

django rest_framework 框架动态设置序列化返回的字段

动态修改字段可以使Django rest框架API像graphQL端点一样&#xff0c;只从模型中检索所需的字段。 一旦序列化器被初始化&#xff0c;就可以使用.fields属性访问序列化器上设置的字段字典。访问和修改此属性允许您动态修改序列化器。 显式地修改fields参数可以帮助您做一些奇…