一 根底信息

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"

proxy 须要 allow 的 doamin 如下:

域名用处
http://mirror.cnrancher.comRancher 国内组件源
https://registry.cn-hangzhou.aliyuncs.comRancher 国内镜像源
https://dockerauth.cn-hangzhou.aliyuncs.comRancher 国内镜像源
https://gitee.comRancher 国内 Helm Charts 源
http://mirrors.aliyun.comYUM 源
https://mirrors.aliyun.comYUM 源
https://rpm.rancher.comRancher 源

评论:

以上的 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 dockerdocker-cleanup.service                        disableddocker-storage-setup.service                  disableddocker.service                                disableddocker-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 -hFilesystem                 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 -ehelp (){    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;;esacif [[ $1 == '' ]];then    help;    exit;fiCMDOPTS="$*"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 ;;    esacdone# 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.keySSL_CSR=$SSL_DOMAIN.csrSSL_CERT=$SSL_DOMAIN.crtecho -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}fiif [[ -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}"fiecho -e "\033[32m ====> 3. 生成 Openssl 配置文件 ${SSL_CONFIG} \033[0m"cat > ${SSL_CONFIG} <<EOM[req]req_extensions = v3_reqdistinguished_name = req_distinguished_name[req_distinguished_name][ v3_req ]basicConstraints = CA:FALSEkeyUsage = nonRepudiation, digitalSignature, keyEnciphermentextendedKeyUsage = clientAuth, serverAuthEOMif [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} || -n ${SSL_DOMAIN} ]]; then    cat >> ${SSL_CONFIG} <<EOMsubjectAltName = @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    fifiecho -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"echoecho -e "\033[32m ====> 8. 以 YAML 格局输入后果 \033[0m"echo "----------------------------------------------------------"echo "ca_key: |"cat $CA_KEY | sed 's/^/  /'echoecho "ca_cert: |"cat $CA_CERT | sed 's/^/  /'echoecho "ssl_key: |"cat $SSL_KEY | sed 's/^/  /'echoecho "ssl_csr: |"cat $SSL_CSR | sed 's/^/  /'echoecho "ssl_cert: |"cat $SSL_CERT | sed 's/^/  /'echoecho -e "\033[32m ====> 9. 附加 CA 证书到 Cert 文件 \033[0m"cat ${CA_CERT} >> ${SSL_CERT}echo "ssl_cert: |"cat $SSL_CERT | sed 's/^/  /'echoecho -e "\033[32m ====> 10. 重命名服务证书 \033[0m"echo "cp ${SSL_DOMAIN}.key tls.key"cp ${SSL_DOMAIN}.key tls.keyecho "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/,第一次显示如下:

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

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

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

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

至此 Rancher 装置实现。

2.1.4 Rancher 中国区优化配置

应用码云代替 Github

Rancher 默认应用 Github 上的 repo 作为 Chart 仓库的 URL,如果呈现 timeout 状况,能够将 Chart 仓库 URL 替换成码云的地址。

每个 repo 的对应关系如下:

利用商店地址RANCHER REPO 地址GITEE 地址
https://git.rancher.io/helm3-chartshttps://github.com/rancher/helm3-chartshttps://gitee.com/rancher/helm3-charts
https://git.rancher.io/chartshttps://github.com/rancher/chartshttps://gitee.com/rancher/charts
https://git.rancher.io/system-chartshttps://github.com/rancher/system-chartshttps://gitee.com/rancher/system-charts

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

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

批改后如下:

总结

至此,Rancher 单节点装置实现。

  1. 地址:https://192.168.0.100
  2. 目录:/data/rancher
  3. 证书目录:/data/rancher/certs
  4. 审计日志目录:/data/rancher/log/auditlog
三人行, 必有我师; 常识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

  1. Configure Docker to use a proxy with or without authentication - Red Hat Customer Portal ↩
  2. 选项 B - 应用已有的自签名证书 - Rancher 官网文档 ↩
  3. 自定义 CA 证书 - Rancher 官网文档 ↩