Rancher 系列文章-RHEL7.8 離線有代理?xiàng)l件下安裝單節(jié)點(diǎn) Rancher

一 基礎(chǔ)信息

1.1 前提

  1. 本次安裝的為 20220129 最新版:Rancher v2.6.3
  2. VM 版本為 RHEL 7.8, 7.9 或 8.2, 8.3, 8.4(Rancher 官網(wǎng)要求)
  3. VM YUM 倉庫:已配置對應(yīng)版本的 RHEL 和 EPEL YUM 倉庫
  4. VM 提供 root 權(quán)限
  5. 已配置 ntp(防止因?yàn)闀r間不一致導(dǎo)致的詭異問題)
  6. 提供 Proxy 訪問互聯(lián)網(wǎng) Rancher 相關(guān)域名梯影;
  7. 端口要求韵吨,為了正常運(yùn)行,Rancher 需要在 Rancher 節(jié)點(diǎn)和下游 Kubernetes 集群節(jié)點(diǎn)上開放一些端口温亲。端口需求列出了不同集群類型的 Rancher 和下游集群的所有必要端口像屋。具體如下表:

Rancher 節(jié)點(diǎn)的入站規(guī)則

協(xié)議 端口 目的 描述
TCP 80 客戶端端考,操作機(jī) Rancher 節(jié)點(diǎn) 使用外部 SSL 終端時的 Rancher UI/API
TCP 443 客戶端紫新,操作機(jī),所有 K3S 節(jié)點(diǎn) Rancher 節(jié)點(diǎn) Rancher agent担平,Rancher UI/API示绊,kubectl

Rancher 節(jié)點(diǎn)的出站規(guī)則

協(xié)議 端口 目的 描述
TCP 22 Rancher 節(jié)點(diǎn) 所有 K3S 節(jié)點(diǎn) 使用 Node Driver 對節(jié)點(diǎn)進(jìn)行 SSH 配置
TCP 2376 Rancher 節(jié)點(diǎn) 所有 K3S 節(jié)點(diǎn) Docker Machine 使用的 Docker daemon TLS 端口
TCP 6443 Rancher 節(jié)點(diǎn) K3S Server Kubernetes API server

? 成功:

如果以上前期條件均已滿足。

即可以通過「離線 - 有代理」方式進(jìn)行安裝暂论。

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 國內(nèi)組件源
https://registry.cn-hangzhou.aliyuncs.com Rancher 國內(nèi)鏡像源
https://dockerauth.cn-hangzhou.aliyuncs.com Rancher 國內(nèi)鏡像源
https://gitee.com Rancher 國內(nèi) Helm Charts 源
http://mirrors.aliyun.com YUM 源
https://mirrors.aliyun.com YUM 源
https://rpm.rancher.com Rancher 源

?? 評論:

以上的 allowed domain 可能不全面褐,需要進(jìn)一步補(bǔ)充。

二 「離線 - 有代理」方式安裝

?? 評論:

本次環(huán)境為:離線取胎,有代理展哭。

通過代理安裝部署。

假設(shè) Rancher 所在主機(jī) 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 有關(guān)的 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]

首先創(chuàng)建配置文件:

# 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"

最后重啟容器并驗(yàn)證:

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

?? 評論:

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

2.1.2 生成 100 年有效期的證書

?? 評論:

df -h 查看文件系統(tǒng)役衡,如下:

# 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 證書需要的主域名手蝎,如不指定則默認(rèn)為 www.rancher.local榕莺,如果是 ip 訪問服務(wù),則可忽略柑船;'
    echo  ' --ssl-trusted-ip: 一般 ssl 證書只信任域名的訪問請求帽撑,有時候需要使用 ip 去訪問 server,那么需要給 ssl 證書添加擴(kuò)展 IP鞍时,多個 IP 用逗號隔開;'
    echo  ' --ssl-trusted-domain: 如果想多個域名訪問扣蜻,則添加擴(kuò)展域名(SSL_TRUSTED_DOMAIN), 多個擴(kuò)展域名用逗號隔開逆巍;'
    echo  ' --ssl-size: ssl 加密位數(shù),默認(rèn) 2048莽使;'
    echo  ' --ssl-cn: 國家代碼 (2 個字母的代號), 默認(rèn) 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 相關(guān)配置
CA_DATE=${CA_DATE:-3650}
CA_KEY=${CA_KEY:-cakey.pem}
CA_CERT=${CA_CERT:-cacerts.pem}
CA_DOMAIN=cattle-ca

# ssl 相關(guān)配置
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 個字母的代號), 默認(rèn) 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. 發(fā)現(xiàn)已存在 CA 私鑰锐极,備份"${CA_KEY}"為"${CA_KEY}"-bak,然后重新創(chuàng)建 \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. 發(fā)現(xiàn)已存在 CA 證書芳肌,先備份"${CA_CERT}"為"${CA_CERT}"-bak灵再,然后重新創(chuàng)建 \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. 生成服務(wù) SSL KEY ${SSL_KEY} \033[0m"
openssl genrsa -out ${SSL_KEY} ${SSL_SIZE}

echo -e "\033[32m ====> 5. 生成服務(wù) 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. 生成服務(wù) 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 格式輸出結(jié)果 \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. 重命名服務(wù)證書 \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 方式啟動,方便通過文件形式查看相關(guān)配置亿笤。

# 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...,點(diǎn)擊 Continue 進(jìn)入 rancher 首頁肃拜,如下圖:

Rancher 首頁

至此 Rancher 安裝完成痴腌。

2.1.4 Rancher 中國區(qū)優(yōu)化配置

使用碼云代替 Github

Rancher 默認(rèn)使用 Github 上的 repo 作為 Chart 倉庫的 URL,如果出現(xiàn) timeout 情況燃领,可以將 Chart 倉庫 URL 替換成碼云的地址士聪。

每個 repo 的對應(yīng)關(guān)系如下:

應(yīng)用商店地址 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. 首頁點(diǎn)擊左上角漢堡菜單猛蔽,選擇「管理集群」->「Advanced」-> 「Chart 倉庫」
  2. 點(diǎn)擊列表右側(cè)的省略號 -> Edit
  3. 將 Chart 倉庫 URL 替換成碼云中的地址即可剥悟,點(diǎn)擊 Save
  4. 此時,對應(yīng)的 Chart 倉庫的狀態(tài)變?yōu)?Refreshed枢舶,等待其變?yōu)?Active 之后即可正常使用

修改后如下:

修改 Chart 倉庫

總結(jié)

至此懦胞,Rancher 單節(jié)點(diǎn)安裝完成。??????

  1. 地址:https://192.168.0.100
  2. 目錄:/data/rancher
  3. 證書目錄:/data/rancher/certs
  4. 審計(jì)日志目錄:/data/rancher/log/auditlog

三人行, 必有我?guī)? 知識共享, 天下為公. 本文由東風(fēng)微鳴技術(shù)博客 EWhisper.cn 編寫.


  1. Configure Docker to use a proxy with or without authentication - Red Hat Customer Portal ?

  2. 選項(xiàng) B - 使用已有的自簽名證書 - Rancher 官方文檔 ?

  3. 自定義 CA 證書 - Rancher 官方文檔 ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凉泄,一起剝皮案震驚了整個濱河市躏尉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌后众,老刑警劉巖胀糜,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颅拦,死亡現(xiàn)場離奇詭異,居然都是意外死亡教藻,警方通過查閱死者的電腦和手機(jī)距帅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來括堤,“玉大人碌秸,你說我怎么就攤上這事∏那裕” “怎么了讥电?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轧抗。 經(jīng)常有香客問我恩敌,道長,這世上最難降的妖魔是什么横媚? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任纠炮,我火速辦了婚禮,結(jié)果婚禮上灯蝴,老公的妹妹穿的比我還像新娘恢口。我一直安慰自己,他們只是感情好绽乔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布弧蝇。 她就那樣靜靜地躺著,像睡著了一般折砸。 火紅的嫁衣襯著肌膚如雪看疗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天睦授,我揣著相機(jī)與錄音两芳,去河邊找鬼。 笑死去枷,一個胖子當(dāng)著我的面吹牛怖辆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播删顶,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼竖螃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逗余?” 一聲冷哼從身側(cè)響起特咆,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎录粱,沒想到半個月后腻格,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體画拾,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年菜职,在試婚紗的時候發(fā)現(xiàn)自己被綠了青抛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡酬核,死狀恐怖蜜另,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愁茁,我是刑警寧澤蚕钦,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站鹅很,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏罪帖。R本人自食惡果不足惜促煮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望整袁。 院中可真熱鬧菠齿,春花似錦、人聲如沸坐昙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炸客。三九已至疾棵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痹仙,已是汗流浹背是尔。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留开仰,地道東北人拟枚。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像众弓,于是被迫代替她去往敵國和親恩溅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容