RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡

2024-01-03 13:03:48

先决条件#

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.crttls.key的 PEM 格式的证书以及相关的密钥。如果使用私有 CA,则还必须上传该 CA 证书。这是由于你的节点可能不信任此私有 CA。 Rancher 将获取该 CA 证书,并从中生成一个校验和,各种 Rancher 组件将使用该校验和来验证其与 Rancher 的连接。
设置Chart 选项描述是否需要 cert-manager
Rancher 生成的证书(默认)ingress.tls.source=rancher使用 Rancher 生成的 CA 签发的自签名证书此项为默认选项
Let’s Encryptingress.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

技术问题 | Rancher文档

  • 如上所述,为你的证书设置适当的hostname
  • replicas设置为 Rancher 部署所使用的复制数量。默认为 3;如果你的集群中少于 3 个节点,你应填写实际节点数量。
  • 设置ingress.tls.sourcesecret
  • 要安装一个特定的 Rancher 版本,使用--version?标志,例如:--version 2.5.8
  • 如果你安装的是 alpha 版本,Helm 要求在命令中加入--devel选项。
3.2?添加 TLS Secret(千万不要遗漏该步):现在已经部署了 Rancher,还需参考添加 TLS Secret发布证书文件,以便 Rancher 和 ingress 控制器可以使用它们

?注意: 可以使用?一键生成 ssl 自签名证书脚本?来快速生成符合 rancher 要求的自签名证书。该脚本会自动生成本文中所需要的?tls.crttls.key?和?cacerts.pem

只有当我们在?cattle-system?命名空间,将自签名证书和对应密钥配置到?tls-rancher-ingress?的密文中,Kubernetes 才会为 Rancher 创建所有的对象和服务。

将服务器证书和任何所需的中间证书合并到名为?tls.crt?的文件中,将您的证书密钥拷贝到名称为?tls.key?的文件中。

?例如,acme.shfullchain.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

1. 配置基础设施和私有镜像仓库 | Rancher文档

5 配置 NGINX 负载均衡

我们将使用 NGINX 作为L4层负载均衡器(TCP),它将请求轮训转发到后端的 Rancher server 节点。在此配置中,负载均衡器位于 Rancher server 节点的前面。负载均衡器可以是任何能够运行 NGINX 的主机。我们不建议使用任意一个 Rancher server 节点作为负载均衡器节点,因为默认配置下每个 K8S 节点都会运行 ingress 控制器,而 ingress 控制器以为host网络模式运行,并默认监听了80443端口,所以默认情况下会出现端口冲突。如果一定要将 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.141.15版本。有关安装 NGINX 的帮助,请参阅安装文档

stream模块是必需的,在 NGINX 官方安装包中包含了这个模块。请参阅您的操作系统文档来了解如何在操作系统上安装和启用 NGINX?stream模块。

创建 NGINX 配置#

安装 NGINX 之后,您需要使用节点的 IP 地址更新 NGINX 配置文件nginx.conf

NGINX 配置示例

  1. 将下面的配置示例复制并粘贴到您喜欢的文本编辑器中,保存为nginx.conf

  2. 在 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

效果图:

?

文章来源:https://blog.csdn.net/Michaelwubo/article/details/135357376
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。