可以看我往期文档搭建
安装前需要确认下,当前需要安装的rancher版本是否支持当前k3s的版本
wget https://get.helm.sh/helm-v3.2.4-linux-amd64.tar.gz
tar -xf helm-v3.2.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
echo "export KUBECONFIG=/etc/rancher/k3s/k3s.yaml" >> /etc/profile && source /etc/profile
# 添加rancher镜像源
helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable
# 更新源
helm repo update
需要定义一个 Kubernetes Namespace,在 Namespace 中安装由 Chart
创建的资源。这个命名空间的名称为cattle-system:
kubectl create namespace cattle-system
如果你手动安装了CRD,而不是在Helm安装命令中添加了
--set installCRDs=true
选项,你应该在升级Helm chart之前升级CRD资源
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --version v1.5.1
查看 cert-manager
kubectl get pods --namespace cert-manager
如果使用Let’s Encrypt证书证书则可执行如下方式直接安装
安装时可设置的选项,可查看官方文档: https://docs.rancher.cn/docs/rancher2.5/installation/install-rancher-on-k8s/chart-options/_index/
如下为对应的命令空间 cattle-system 在上面创建的
如下 registry.cn-hangzhou.aliyuncs.com/rancher/rancher 为对应的rancher镜像
如下 replicas 为设置 Rancher 部署所使用的复制数量(副本数) 默认为 3
如下 ingress.tls.source 设置为 letsEncrypt (表示使用Let’s Encrypt证书)
如果要安装一个特定的 Rancher 版本, 使用–version 标志,例如:–version 2.3.6
对应 etsEncrypt.email 为证书到期通知的邮箱地址
如果你安装的是 alpha 版本,Helm 要求在命令中加入 –devel 选项
helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=demo.rancher.com --set replicas=3 --set ingress.tls.source=letsEncrypt --set rancherImage=registry.cn-hangzhou.aliyuncs.com/rancher/rancher --set letsEncrypt.email=[email protected]
指定安装版本,示例如下:
helm install rancher rancher-stable/rancher \
--version v2.5.12 \
--namespace cattle-system \
--set hostname=demo.rancher.com\
--set ingress.tls.source=letsEncrypt \
--set rancherImage=registry.cn-hangzhou.aliyuncs.com/rancher/rancher \
--set letsEncrypt.email=[email protected]
对应官网文档: http://docs.rancher.cn/docs/rancher2/admin-settings/replace-ip-domain/_index/
# 创建目录
mkdir /certs
#进入目录
cd /certs
vi create_self-signed-cert.sh
将 create_self-signed-cert.sh 文件放在 /certs 目录下
#!/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} ]]; 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
如下 demo.rancher.com 为对应的域名地址
如下 192.168.15.223,192.168.15.224 为对应的IP (多个以,号隔开)
sh ./create_self-signed-cert.sh --ssl-domain=demo.rancher.com --ssl-trusted-ip=192.168.15.223,192.168.15.224 --ssl-size=2048 --ssl-date=3650
将证书上传到集群中去, 到时 ingress 要用
如下 ./tls.crt 表示对应证书文件中生成的证书文件
如下 ./tls.key 表示对应证书文件中生成的证书文件
# 设置环境变量(已设置则可以不用再执行了)
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# 创建cattle-system命令空间 (已设置则可以不用再执行了)
kubectl --kubeconfig=$kubeconfig create namespace cattle-system
# 配置对应证书
kubectl --kubeconfig=$kubeconfig -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key
如下 ./cacerts.pem 表示对应证书文件中生成的证书文件
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=./cacerts.pem
安装时可设置的选项,可查看官方文档: https://docs.rancher.cn/docs/rancher2.5/installation/install-rancher-on-k8s/chart-options/_index/
如下为对应的命令空间 cattle-system 在上面创建的
如下为对应的域名 demo.rancher.com 需要和创建证书时的域名一致
如下 registry.cn-hangzhou.aliyuncs.com/rancher/rancher 为对应的rancher镜像
如下 replicas 为设置 Rancher 部署所使用的复制数量(副本数) 默认为 3;如果你的集群中少于 3 个节点,你应填写实际节点数量
如下 ingress.tls.source 设置为 secret
如果要安装一个特定的 Rancher 版本, 使用–version 标志,例如:–version 2.3.6
如果你安装的是 alpha 版本,Helm 要求在命令中加入 –devel 选项
helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=demo.rancher.com --set ingress.tls.source=secret --set rancherImage=registry.cn-hangzhou.aliyuncs.com/rancher/rancher --set replicas=2 --set privateCA=true
kubectl -n cattle-system get deploy rancher
kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{"\n"}}'
helm delete rancher -n cattle-system
升级前看下当前的k3s版本是否支持,确定是否需要先升级下k3s
如下对应 demo.rancher.com 域名跟原来保持一致
升级时也可以像安装时一样指定一些参数
# 更新源
helm repo update
# 执行升级
helm upgrade rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=demo.rancher.com
升级时如果忘记对应域名了,可执行如下命令查看
helm get values rancher -n cattle-system