RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡
先决条件#
- Kubernetes 集群?参考RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客
- CLI 工具
- Ingress Controller(仅适用于托管 Kubernetes)
1. 为 Rancher 创建 Namespace
[root@nginx ~]# kubectl create namespace cattle-syste
namespace/cattle-syste created
[root@nginx ~]# kubectl get ns
NAME STATUS AGE
cattle-syste Active 2s
default Active 4m1s
ingress-nginx Active 3m4s
kube-node-lease Active 4m3s
kube-public Active 4m3s
kube-system Active 4m3s
2 选择你的 SSL 选项#
Rancher Server 默认需要 SSL/TLS 配置来保证访问的安全性
提示
如果你想在外部终止 SSL/TLS,请参考:RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客。
你可以从以下三种证书来源中选择一种,证书将用来在 Rancher Server 中终止 TLS:
- Rancher 生成的 TLS 证书:?在这种情况下,你需要在集群中安装?
cert-manager。 Rancher 利用?cert-manager?签发并维护证书。Rancher 将生成自己的 CA 证书,并使用该 CA 签署证书。然后?cert-manager?负责管理该证书。 - Let's Encrypt:?Let's Encrypt 选项也需要使用?
cert-manager。但是,在这种情况下,cert-manager 与 Let's Encrypt 的特殊颁发者相结合,该颁发者执行获取 Let's Encrypt 颁发的证书所需的所有操作(包括请求和验证)。此配置使用 HTTP 验证(HTTP-01),因此负载均衡器必须具有可以从公网访问的公共 DNS 记录。 - 使用你已有的证书:?此选项使你可以使用自己的权威 CA 颁发的证书或自签名 CA 证书。 Rancher 将使用该证书来保护 WebSocket 和 HTTPS 流量。在这种情况下,你必须上传名称分别为
tls.crt和tls.key的 PEM 格式的证书以及相关的密钥。如果使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。 Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
| 设置 | Chart 选项 | 描述 | 是否需要 cert-manager |
|---|---|---|---|
| Rancher 生成的证书(默认) | ingress.tls.source=rancher | 使用 Rancher 生成的 CA 签发的自签名证书此项为默认选项 | 是 |
| Let’s Encrypt | ingress.tls.source=letsEncrypt | 使用Let's Encrypt颁发的证书 | 是 |
| 你已有的证书 | ingress.tls.source=secret | 使用你的自己的证书(Kubernetes 密文) | 否 |
重要
Rancher 中国技术支持团队建议你使用“你已有的证书”?ingress.tls.source=secret?这种方式,从而减少对 cert-manager 的运维成本。
3 根据你选择的 SSL 选项,通过 Helm 安装 Rancher
注意: 可以使用?CSDN来快速生成符合 rancher 要求的自签名证书
在此选项中,将使用你自己的证书来创建 Kubernetes secret,以供 Rancher 使用。
运行这个命令时,hostname?选项必须与服务器证书中的?Common Name?或?Subject Alternative Names?条目匹配,否则 Ingress controller 将无法正确配置。
尽管技术上仅需要Subject Alternative Names中有一个条目,但是拥有一个匹配的?Common Name?可以最大程度的提高与旧版浏览器/应用程序的兼容性。
3.1 如何查看服务器证书的Common Name?和?Subject Alternative Names?
查看Common Name:
openssl x509 -noout -subject -in cert.pem
subject= /CN=jetto.jettech.com
查看Subject Alternative Names:
openssl x509 -noout -in cert.pem -text | grep DNS
DNS:jetto.jettech.com
- 如上所述,为你的证书设置适当的
hostname。 - 将
replicas设置为 Rancher 部署所使用的复制数量。默认为 3;如果你的集群中少于 3 个节点,你应填写实际节点数量。 - 设置
ingress.tls.source为secret。 - 要安装一个特定的 Rancher 版本,使用
--version?标志,例如:--version 2.5.8。 - 如果你安装的是 alpha 版本,Helm 要求在命令中加入
--devel选项。
3.2?添加 TLS Secret(千万不要遗漏该步):现在已经部署了 Rancher,还需参考添加 TLS Secret发布证书文件,以便 Rancher 和 ingress 控制器可以使用它们
?注意: 可以使用?一键生成 ssl 自签名证书脚本?来快速生成符合 rancher 要求的自签名证书。该脚本会自动生成本文中所需要的?
tls.crt、tls.key?和?cacerts.pem
只有当我们在?cattle-system?命名空间,将自签名证书和对应密钥配置到?tls-rancher-ingress?的密文中,Kubernetes 才会为 Rancher 创建所有的对象和服务。
将服务器证书和任何所需的中间证书合并到名为?tls.crt?的文件中,将您的证书密钥拷贝到名称为?tls.key?的文件中。
?例如,acme.sh在fullchain.cer文件中提供了服务器证书和中间证书。在这种情况下,您应该将fullchain.cer文件重命名为tls.crt,将证书秘钥文件重命名为tls.key?。
使用?kubectl?创建?tls?类型的密文。
[root@nginx ok]# ls
cacerts.pem cakey.pem jetto.jettech.com.crt jetto.jettech.com.key tls.crt
cacerts.srl create_self-signed-cert.sh jetto.jettech.com.csr openssl.cnf tls.key
[root@nginx ok]# kubectl -n cattle-system create secret tls tls-rancher-ingres --cert=tls.crt --key=tls.key
secret/tls-rancher-ingres created
[root@nginx ok]# kubectl -n cattle-system get secret
NAME TYPE DATA AGE
default-token-9wc8v kubernetes.io/service-account-token 3 22s
tls-rancher-ingres kubernetes.io/tls 2 13s
[root@nginx ok]# kubectl -n cattle-system describe secret tls-rancher-ingres
Name: tls-rancher-ingres
Namespace: cattle-system
Labels: <none>
Annotations: <none>
Type: kubernetes.io/tls
Data
====
tls.crt: 2343 bytes
tls.key: 1675 bytes
提示:?如果您想要更换证书,您可以使用?
kubectl -n cattle-system delete secret tls-rancher-ingress?来删除?tls-rancher-ingress?密文,之后使用上面的命令创建一个新的密文。如果您使用的是私有 CA 签发的证书,仅当新证书与当前证书是由同一个 CA 签发的,才可以替换。
3.3?使用私有 CA 签发证书
如果您使用的是私有 CA,Rancher 需要您提供 CA 证书的副本,用来校验 Rancher Agent 与 Server 的连接。
拷贝 CA 证书到名为?cacerts.pem?的文件,使用?kubectl?命令在?cattle-system?命名空间中创建名为?tls-ca?的密文。
[root@nginx ok]# kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem=./cacerts.pem
secret/tls-ca created
注意:?Rancher 在启动时检索
tls-ca密文。如果您的 Rancher Server 正在运行中,您需要重新启动 Rancher Server Pod 才能使新的 CA 生效。
?4 helm安装rancher集群
[root@nginx ok]# helm install rancher rancher-stable/rancher --namespace cattle-system --set hostname=jetto.jettech.com --set bootstrapPassword=123456aA --set rancherImage=harbor.jettech.com/rancher/rancher --set rancherImageTag=v2.5.8 --set ingress.tls.source=secret --set replicas=3 --set privateCA=true --set systemDefaultRegistry=harbor.jettech.com --set useBundledSystemChart=true
如果您使用的是由私有 CA 签名的证书,则在?
--set ingress.tls.source=secret?之后添加?--set privateCA=true
查看:?
[root@nginx ~]# kubectl create namespace cattle-system
namespace/cattle-system created
[root@nginx ~]# kubectl -n cattle-system rollout status deploy/rancher
Waiting for deployment "rancher" rollout to finish: 0 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment spec update to be observed...
Waiting for deployment "rancher" rollout to finish: 1 of 3 updated replicas are available...
Waiting for deployment "rancher" rollout to finish: 2 of 3 updated replicas are available...
deployment "rancher" successfully rolled out
[root@nginx ok]# kubectl get all -A
NAMESPACE NAME READY STATUS RESTARTS AGE
cattle-system pod/helm-operation-5lqb9 0/2 Completed 0 28s
cattle-system pod/helm-operation-9rqd2 0/2 Completed 0 47s
cattle-system pod/helm-operation-jm52w 0/2 Completed 0 35s
cattle-system pod/helm-operation-rqcnc 0/2 Completed 0 21s
cattle-system pod/helm-operation-z52w5 0/2 Completed 0 41s
cattle-system pod/helm-operation-zvbjs 0/2 Completed 0 61s
cattle-system pod/rancher-65f6b5bbf6-bm2j2 1/1 Running 0 107s
cattle-system pod/rancher-65f6b5bbf6-bstsh 1/1 Running 0 107s
cattle-system pod/rancher-65f6b5bbf6-rh4bk 1/1 Running 0 107s
cattle-system pod/rancher-webhook-85f777cb65-275wx 1/1 Running 0 25s
fleet-system pod/fleet-agent-7cc65df565-hctpv 1/1 Running 0 23s
fleet-system pod/fleet-controller-54dd95c75b-22xfr 1/1 Running 0 54s
fleet-system pod/gitjob-86ccc9ddc9-h4mch 1/1 Running 0 54s
ingress-nginx pod/default-http-backend-565f86f5f9-8wwdg 1/1 Running 0 24m
ingress-nginx pod/nginx-ingress-controller-22vg8 1/1 Running 0 24m
ingress-nginx pod/nginx-ingress-controller-gnt2z 1/1 Running 0 24m
ingress-nginx pod/nginx-ingress-controller-plzrm 1/1 Running 0 24m
kube-system pod/calico-kube-controllers-b486cd75d-dnp4h 1/1 Running 1 24m
kube-system pod/calico-node-lz9tv 1/1 Running 0 24m
kube-system pod/calico-node-nlhfl 1/1 Running 0 24m
kube-system pod/calico-node-pks26 1/1 Running 0 24m
kube-system pod/coredns-56fdbbcdfc-tkw4m 1/1 Running 0 24m
kube-system pod/coredns-56fdbbcdfc-vjt27 1/1 Running 0 24m
kube-system pod/coredns-autoscaler-5c64bb75c8-4rp8f 1/1 Running 0 24m
kube-system pod/metrics-server-6b697547fc-tmcjf 1/1 Running 0 24m
kube-system pod/rke-coredns-addon-deploy-job-9qjtz 0/1 Completed 0 24m
kube-system pod/rke-ingress-controller-deploy-job-bm7qt 0/1 Completed 0 24m
kube-system pod/rke-metrics-addon-deploy-job-bm8kd 0/1 Completed 0 24m
kube-system pod/rke-network-plugin-deploy-job-dm4kd 0/1 Completed 0 24m
rancher-operator-system pod/rancher-operator-cccbf7f8-fgsm5 1/1 Running 0 32s
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
cattle-system service/rancher ClusterIP 10.43.153.193 <none> 80/TCP,443/TCP 107s
cattle-system service/rancher-webhook ClusterIP 10.43.137.105 <none> 443/TCP 25s
default service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 25m
fleet-system service/gitjob ClusterIP 10.43.43.108 <none> 80/TCP 54s
ingress-nginx service/default-http-backend ClusterIP 10.43.246.34 <none> 80/TCP 24m
kube-system service/kube-dns ClusterIP 10.43.0.10 <none> 53/UDP,53/TCP,9153/TCP <invalid>
kube-system service/metrics-server ClusterIP 10.43.187.147 <none> 443/TCP 24m
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
ingress-nginx daemonset.apps/nginx-ingress-controller 3 3 3 3 3 <none> 24m
kube-system daemonset.apps/calico-node 3 3 3 3 3 kubernetes.io/os=linux 24m
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
cattle-system deployment.apps/rancher 3/3 3 3 107s
cattle-system deployment.apps/rancher-webhook 1/1 1 1 25s
fleet-system deployment.apps/fleet-agent 1/1 1 1 32s
fleet-system deployment.apps/fleet-controller 1/1 1 1 54s
fleet-system deployment.apps/gitjob 1/1 1 1 54s
ingress-nginx deployment.apps/default-http-backend 1/1 1 1 24m
kube-system deployment.apps/calico-kube-controllers 1/1 1 1 24m
kube-system deployment.apps/coredns 2/2 2 2 <invalid>
kube-system deployment.apps/coredns-autoscaler 1/1 1 1 <invalid>
kube-system deployment.apps/metrics-server 1/1 1 1 24m
rancher-operator-system deployment.apps/rancher-operator 1/1 1 1 32s
NAMESPACE NAME DESIRED CURRENT READY AGE
cattle-system replicaset.apps/rancher-65f6b5bbf6 3 3 3 107s
cattle-system replicaset.apps/rancher-webhook-85f777cb65 1 1 1 25s
fleet-system replicaset.apps/fleet-agent-7cc65df565 1 1 1 23s
fleet-system replicaset.apps/fleet-agent-c46d75d6d 0 0 0 32s
fleet-system replicaset.apps/fleet-controller-54dd95c75b 1 1 1 54s
fleet-system replicaset.apps/gitjob-86ccc9ddc9 1 1 1 54s
ingress-nginx replicaset.apps/default-http-backend-565f86f5f9 1 1 1 24m
kube-system replicaset.apps/calico-kube-controllers-b486cd75d 1 1 1 24m
kube-system replicaset.apps/coredns-56fdbbcdfc 2 2 2 24m
kube-system replicaset.apps/coredns-autoscaler-5c64bb75c8 1 1 1 24m
kube-system replicaset.apps/metrics-server-6b697547fc 1 1 1 24m
rancher-operator-system replicaset.apps/rancher-operator-cccbf7f8 1 1 1 32s
NAMESPACE NAME COMPLETIONS DURATION AGE
kube-system job.batch/rke-coredns-addon-deploy-job 1/1 1s 24m
kube-system job.batch/rke-ingress-controller-deploy-job 1/1 2s 24m
kube-system job.batch/rke-metrics-addon-deploy-job 1/1 2s 24m
kube-system job.batch/rke-network-plugin-deploy-job 1/1 8s 24m
5 配置 NGINX 负载均衡
我们将使用 NGINX 作为L4层负载均衡器(TCP),它将请求轮训转发到后端的 Rancher server 节点。在此配置中,负载均衡器位于 Rancher server 节点的前面。负载均衡器可以是任何能够运行 NGINX 的主机。我们不建议使用任意一个 Rancher server 节点作为负载均衡器节点,因为默认配置下每个 K8S 节点都会运行 ingress 控制器,而 ingress 控制器以为host网络模式运行,并默认监听了80和443端口,所以默认情况下会出现端口冲突。如果一定要将 NGINX 安装在 Rancher server 某个节点上,那么可以编辑 ingress 控制器配置文件,在args中添加参数,端口根据实际情况修改?--http-port=8880 --http-port=8443。 ingress 控制器修改默认端口后,nginx 配置中代理的后端 server 端口也需要一并修改。
说明:在这些示例中,负载均衡器将被配置为将流量定向到三个 Rancher Server 节点。如果将 Rancher 安装在 RKE Kubernetes 集群上,则需要三个节点。如果将 Rancher 安装在 K3s Kubernetes 集群上,则仅需要两个节点。
5.1 安装 NGINX#
首先在负载均衡器主机上安装 NGINX,NGINX 具有适用于所有已知操作系统的软件包。我们测试了1.14和1.15版本。有关安装 NGINX 的帮助,请参阅安装文档。
stream模块是必需的,在 NGINX 官方安装包中包含了这个模块。请参阅您的操作系统文档来了解如何在操作系统上安装和启用 NGINX?stream模块。
创建 NGINX 配置#
安装 NGINX 之后,您需要使用节点的 IP 地址更新 NGINX 配置文件nginx.conf。
NGINX 配置示例
-
将下面的配置示例复制并粘贴到您喜欢的文本编辑器中,保存为
nginx.conf。 -
在 nginx.conf 配置中,用之前准备的节点的 IP 替换?
<IP_NODE_1>,<IP_NODE_2>和<IP_NODE_3>。注意:?有关所有配置选项,请参见NGINX 文档:TCP 和 UDP 负载均衡。
[root@nginx nginx]# cat nginx.conf
worker_processes 4;
worker_rlimit_nofile 40000;
events {
worker_connections 8192;
}
stream {
upstream rancher_servers_http {
least_conn;
server 192.168.1.65:80 max_fails=3 fail_timeout=5s;
server 172.16.10.59:80 max_fails=3 fail_timeout=5s;
server 172.16.10.33:80 max_fails=3 fail_timeout=5s;
}
server {
listen 80;
proxy_pass rancher_servers_http;
}
upstream rancher_servers_https {
least_conn;
server 192.168.1.65:443 max_fails=3 fail_timeout=5s;
server 172.16.10.59:443 max_fails=3 fail_timeout=5s;
server 172.16.10.33:443 max_fails=3 fail_timeout=5s;
}
server {
listen 443;
proxy_pass rancher_servers_https;
}
}
?将 NGINX 作为 Docker 容器运行
[root@nginx nginx]# docker run --name wubo --privileged=true --restart=unless-stopped -p 80:80 -p 443:443 -it -v /home/wubo/rancher/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /etc/localtime:/etc/localtime -d harbor.jettech.com/jettechtools/nginx:1.21.4
效果图:

?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!