乐趣区

关于运维:Rancher-系列文章RHEL78-离线有代理条件下安装单节点-Rancher

一 根底信息

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 节点的入站规定

协定 端口 目标 形容
TCP 80 客户端,操作机 Rancher 节点 应用内部 SSL 终端时的 Rancher UI/API
TCP 443 客户端,操作机,所有 K3S 节点 Rancher 节点 Rancher agent,Rancher UI/API,kubectl

Rancher 节点的出站规定

协定 端口 目标 形容
TCP 22 Rancher 节点 所有 K3S 节点 应用 Node Driver 对节点进行 SSH 配置
TCP 2376 Rancher 节点 所有 K3S 节点 Docker Machine 应用的 Docker daemon TLS 端口
TCP 6443 Rancher 节点 K3S Server Kubernetes 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.com Rancher 国内组件源
https://registry.cn-hangzhou.aliyuncs.com Rancher 国内镜像源
https://dockerauth.cn-hangzhou.aliyuncs.com Rancher 国内镜像源
https://gitee.com Rancher 国内 Helm Charts 源
http://mirrors.aliyun.com YUM 源
https://mirrors.aliyun.com YUM 源
https://rpm.rancher.com 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/,第一次显示如下:

在 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-charts https://github.com/rancher/helm3-charts https://gitee.com/rancher/helm3-charts
https://git.rancher.io/charts https://github.com/rancher/charts https://gitee.com/rancher/charts
https://git.rancher.io/system-charts https://github.com/rancher/system-charts https://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 官网文档 ↩
退出移动版