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

本文主要是介绍RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先决条件#

  • Kubernetes 集群 参考RKE安装k8s及部署高可用rancher之证书在外面的LB(nginx中)-CSDN博客
  • CLI 工具
  • Ingress Controller(仅适用于托管 Kubernetes)

创建集群k8s

[root@nginx locale]# cat rancher-cluster.yml
nodes:- address: 192.168.1.65internal_address: 192.168.1.65user: wuborole: [controlplane, worker, etcd]ssh_key_path: /home/wubo/.ssh/id_rsaport: 22services:etcd:extra_args:auto-compaction-retention: 240 #(单位小时)quota-backend-bytes: '6442450944'backup_config:enabled: true         # 设置true启用ETCD自动备份,设置false禁用;interval_hours: 12    # 快照创建间隔时间,不加此参数,默认5分钟;retention: 6          # etcd备份保留份数;snapshot: truecreation: 6hretention: 24hingress:provider: nginx
#  options:
#    use-forwarded-headers: "true"
#  #hostnetwork: truecluster_name: local
ignore_docker_version: true
prefix_path: /opt/rke
#kubernetes_version: v1.13.5-rancher1-2 #rke 0.2.2 https://github.com/rancher/rke/releases/tag/v1.1.0
#kubernetes_version: v1.17.4-rancher1-3 #rke 1.1.0
kubernetes_version: v1.20.10-rancher1-1 #rke 1.2.12network:plugin: calicomtu: 0options:flannel_backend_type: vxlanprivate_registries:- url: harbor.jettech.comuser: adminpassword: Harbor12345is_default: true
[root@nginx locale]# rke up --config rancher-cluster.yml

1. 为 Rancher 创建 Namespace

[root@nginx ~]# kubectl create namespace cattle-system
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 技术问题 | Rancher文档

如何检查我的证书链是有效的

[root@nginx ok]# openssl verify -CAfile cacerts.pem jetto.jettech.com.crt
jetto.jettech.com.crt: OK

上述命令执行后,如何您收到unable to get local issuer certificate的错误,则证书链是不完整的。这通常意味着您的服务器证书中含有中间 CA 证书。如果您拥有该中间证书,可以采用下述的方法验证。 

[root@nginx ok]# openssl verify -CAfile cacerts.pem -untrusted intermediate.pem jetto.jettech.com.crt

如何您仍然遇到验证验证错误,您可以通过以下命令获取服务器证书的颁布者和主题 

[root@nginx ok]# openssl x509 -noout -subject -issuer -in jetto.jettech.com.crt 
subject= /C=CN/CN=jetto.jettech.com
issuer= /C=CN/CN=localhost

查看Common Name

[root@nginx ok]# openssl x509 -noout -subject -in  tls.crt
subject= /C=CN/CN=jetto.jettech.com

查看Subject Alternative Names

[root@nginx ok]# openssl x509 -noout -in tls.crt -text | grep DNSDNS:jetto.jettech.com, DNS:jetto.jettech.com, IP Address:172.16.10.21, IP Address:192.168.1.65, IP Address:172.16.10.59, IP Address:172.16.10.33

技术问题 | 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.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-ingress --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/tlsData
====
tls.crt:  2343 bytes
tls.key:  1675 bytes

RKE部署Rancher v2.5.8 HA高可用集群 以及常见错误解决_rkecontrolplane was already initialized but no etc-CSDN博客

提示: 如果您想要更换证书,您可以使用 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 -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          32sNAMESPACE       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                  24mNAMESPACE       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   24mNAMESPACE                 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           32sNAMESPACE                 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       32sNAMESPACE     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

效果图:

为了达到最佳性能和安全性,我们建议你为 Rancher Management Server 创建一个专用(local)的 Kubernetes 集群。不建议在此集群上运行用户工作负载。部署 Rancher 后,你可以创建或导入集群来运行你的工作负载。

下图介绍了用户如何通过 Rancher 的认证代理管理 Rancher 启动的 Kubernetes 集群和托管的 Kubernetes 集群:

通过 Rancher 的认证代理管理 Kubernetes 集群

你可以把 Rancher 安装到单个节点或高可用 Kubernetes 集群上。

在生产环境中,建议安装到高可用 Kubernetes 集群。

Rancher 的 Docker 安装仅推荐用于开发和测试环境中。Rancher 版本决定了能否将 Rancher 迁移到高可用集群。

Rancher backup operator 可将 Rancher 从单个 Docker 容器迁移到高可用 Kubernetes 集群上。详情请参见把 Rancher 迁移到新集群。

不管 Rancher Server 是如何安装的,它都应该运行在与其管理的下游集群不同节点上。如果 Rancher 安装在高可用的 Kubernetes 集群上,它需要运行在与其管理的集群不同的集群上。

、架构推荐 | Rancher

架构推荐

如果你准备在单个节点上安装 Rancher,我们推荐你分开部署 Rancher 与下游集群。

分开部署 Rancher 与下游集群​

下游集群,是运行你自己的应用和服务的下游 Kubernetes 集群。

如果你通过 Docker 安装了 Rancher,运行 Rancher Server 的节点应该与你的下游集群分开。

如果你需要使用 Rancher 管理下游 Kubernetes 集群,那么运行 Rancher Server 的 Kubernetes 集群也应该与下游集群分开。

为什么高可用(HA)更适合生产环境中的 Rancher​

我们建议在高可用 Kubernetes 集群上安装 Rancher Server,以保护 Rancher Server 的数据。在高可用安装中,负载均衡器充当客户端的单点入口,并在集群中的多台服务器之间分配网络流量,这有助于防止任何一台服务器成为单点故障。

我们不建议在单个 Docker 容器中安装 Rancher,因为如果该节点发生故障,则其他节点上将没有可用的集群数据副本,并且你可能会丢失 Rancher Server 上的数据。

K3s Kubernetes 集群安装​

底层 Kubernetes 集群的一种选择是使用 K3s Kubernetes。K3s 是 Rancher CNCF 认证的 Kubernetes 发行版。K3s 易于安装,仅需要 Kubernetes 内存的一半,所有组件都在一个小于 100 MB 的二进制文件中。K3s 的另一个优点是允许外部 Datastore 保存集群数据,因此可以把 K3s 服务器节点视为无状态。

运行 Rancher Management Server 的 K3s Kubernetes 集群的架构

RKE Kubernetes 集群安装​

在 RKE 安装中,集群数据在集群中的三个 etcd 节点上复制,以在某个节点发生故障时提供冗余和进行数据复制。

运行 Rancher Management Server 的 RKE Kubernetes 集群的架构

Kubernetes 安装的负载均衡器推荐配置​

我们建议你为负载均衡器和 Ingress Controller 使用以下配置:

  • 把 Rancher 的 DNS 解析到四层负载均衡器上。
  • 负载均衡器应该把 TCP/80 端口和 TCP/443 端口的流量转发到 Kubernetes 集群的全部 3 个节点上。
  • Ingress Controller 会把 HTTP 重定向到 HTTPS,在 TCP/443 端口终结 SSL/TLS。
  • Ingress Controller 会把流量转发到 Rancher deployment 的 Pod 上的 TCP/80 端口。

在 Kubernetes 集群中安装 Rancher,并使用四层负载均衡器,SSL 终止在 Ingress Controller 中

Kubernetes 安装环境​

我们强烈建议你把 Rancher 安装到托管在云提供商(如 AWS EC2 和 Google Compute Engine(GCE)等)上的 Kubernetes 集群上。

为了达到最佳性能和安全性,我们建议你为 Rancher Management Server 创建一个专用的 Kubernetes 集群。不建议在此集群上运行用户工作负载。部署 Rancher 后,你可以创建或导入集群来运行你的工作负载。

Kubernetes 安装的推荐节点角色​

如果 Rancher 安装在 K3s Kubernetes 或 RKE Kubernetes 集群上,以下建议适用。

K3s 集群角色​

在 K3s 集群中有两种类型的节点,分别是 Server 节点和 Agent 节点。你可以把工作负载调度到 Server 节点和 Agent 节点上。Server 节点运行 Kubernetes master。

对于运行 Rancher Management Server 的集群,我们建议使用两个 server 节点。不需要 Agent 节点。

RKE 集群角色​

如果 Rancher 安装在 RKE Kubernetes 集群上,该集群应具有三个节点,并且每个节点都应具有所有三个 Kubernetes 角色,分别是 etcd,controlplane 和 worker。

Rancher Server 和下游 Kubernetes 集群的 RKE 集群架构对比​

我们对 Rancher Server 集群上 RKE 节点角色建议,与对运行你的应用和服务的下游集群的建议相反。

在配置下游 Kubernetes 集群时,Rancher 使用 RKE 作为创建下游 Kubernetes 集群的工具。注意:Rancher 将在未来的版本中添加配置下游 K3s 集群的功能。

我们建议下游 Kubernetes 集群中的每个节点都只分配一个角色,以确保稳定性和可扩展性。

RKE 每个角色至少需要一个节点,但并不强制每个节点只能有一个角色。但是,我们建议为运行应用的集群中的每个节点,使用单独的角色,以保证在服务拓展时,worker 节点上的工作负载不影响 Kubernetes master 或集群的数据。

以下是我们对下游集群的最低配置建议:

  • 三个仅使用 etcd 角色的节点 ,以在三个节点中其中一个发生故障时,仍能保障集群的高可用性。
  • 两个只有 controlplane 角色的节点 ,以保证 master 组件的高可用性。
  • 一个或多个只有 worker 角色的节点,用于运行 Kubernetes 节点组件,以及你部署的服务或应用的工作负载。

在设置 Rancher Server 时,在三个节点上使用全部这三个角色也是安全的,因为:

  • 它允许一个 etcd 节点故障。
  • 它通过多个 controlplane 节点来维护 master 组件的多个实例。
  • 此集群上没有创建除 Rancher 之外的其他工作负载。

由于 Rancher Server 集群中没有部署其他工作负载,因此在大多数情况下,这个集群都不需要使用我们出于可扩展性和可用性的考虑,而为下游集群推荐的架构。

有关下游集群的最佳实践,请查看生产环境清单或最佳实践。

授权集群端点架构​

如果你使用授权集群端点(ACE),我们建议你创建一个指向负载均衡器的 FQDN,这个负载均衡器把流量转到所有角色为 controlplane 的节点。

如果你在负载均衡器上使用了私有 CA 签发的证书,你需要提供 CA 证书,这个证书会包含在生成的 kubeconfig 文件中,以校验证书链。详情请参见 kubeconfig 文件和 API 密钥的相关文档。

在 Rancher 2.6.3 中,注册的 RKE2 和 K3s 集群可以使用 ACE 支持。点击这里了解在下游集群中开启 ACE 的步骤。

添加下游k8s集群

与下游集群通信 | Rancher

本节介绍 Rancher 如何配置和管理运行应用和服务的下游集群。

下图显示了 Cluster Controller、Cluster Agent 和 Node Agent 让 Rancher 控制下游集群的。

以下描述对应于上图中的数字:

  1. 认证代理
  2. Cluster Controller 和 Cluster Agent
  3. Node Agents
  4. 授权集群端点

1. 认证代理​

在此图中,名为 Bob 的用户希望查看在名为 User Cluster 1 的下游集群上运行的所有 Pod。在 Rancher 中,他可以运行 kubectl 命令来查看 Pod。Bob 通过 Rancher 的认证代理进行身份验证。

认证代理将所有 Kubernetes API 调用转发到下游集群。它集成了本地身份验证、Active Directory 和 GitHub 等身份验证方式。在每个 Kubernetes API 调用请求时,认证代理会验证请求方的身份,并在转发给 Kubernetes master 节点之前,设置正确的 Kubernetes 消息头。

Rancher 使用 ServiceAccount 与 Kubernetes 集群通信,该 ServiceAccount 为在 Pod 中运行的进程提供身份。

默认情况下,Rancher 生成一个 kubeconfig 文件,文件包含凭证信息,用于为 Rancher Server 连接下游集群的 Kubernetes API Server 的代理。kubeconfig 文件 (kube_config_rancher-cluster.yml) 包含对集群的完全访问权限。

2. Cluster Controller 和 Cluster Agent​

每个下游集群都有一个 Cluster Agent,用于打开与 Rancher Server 中对应的 Cluster Controller 之间的通道。

每个下游集群有一个 Cluster Controller 和一个 Cluster Agent。每个 Cluster Controller 都能:

  • 检测下游集群中的资源变化
  • 将下游集群的当前状态变更到目标状态
  • 配置集群和项目的访问控制策略
  • 通过调用所需的 Docker Machine 驱动和 Kubernetes 引擎(例如 RKE 和 GKE)来配置集群

默认情况下,Cluster Controller 连接到 Cluster Agent,Rancher 才能与下游集群通信。如果 Cluster Agent 不可用,Cluster Controller 可以连接到 Node Agent。

Cluster Agent,也叫做 cattle-cluster-agent,是运行在下游集群中的组件。它具有以下功能:

  • 连接 Rancher 启动的 Kubernetes 集群中的 Kubernetes API。
  • 管理集群内的工作负载,pod 创建和部署。
  • 根据每个集群的全局策略,应用定义的角色和绑定。
  • 通过与 Cluster Controller 之间的通道,实现集群和 Rancher Server 之间的通信,包括事件,统计数据,节点信息和健康状况。

3. Node Agents​

如果 Cluster Agent(也称为 cattle-cluster-agent)不可用,其中一个 Node Agent 会创建一个连接到 Cluster Controller 的通道与 Rancher 通信。

cattle-node-agent 使用 DaemonSet 资源进行部署,以确保它能在 Rancher 启动的 Kubernetes 集群中的每个节点上运行,用于在执行集群操作时与节点交互。集群操作的包括升级 Kubernetes 版本,创建或恢复 etcd 快照等。

4. 授权集群端点​

授权集群端点(ACE)可连接到下游集群的 Kubernetes API Server,而不用通过 Rancher 认证代理调度请求。

授权集群端点仅适用于 Rancher 启动的 Kubernetes 集群,即只适用于 Rancher 使用 RKE 来配置的集群。它不适用于导入的集群,也不适用于托管在 Kubernetes 提供商中的集群(例如 Amazon 的 EKS)。

授权集群端点的主要用途:

  • 在 Rancher 不可用时访问下游集群
  • 在 Rancher Server 和与下游集群之间相距甚远时降低延迟

kube-api-auth 微服务为授权集群端点提供用户验证功能。当使用 kubectl访问下游集群时,集群的 Kubernetes API Server 使用 kube-api-auth 服务作为 webhook 对用户进行身份验证。

与授权集群端点一样,kube-api-auth 的身份验证功能也仅适用于 Rancher 启动的 Kubernetes 集群。

示例场景: 假设 Rancher Server 位于美国,User Cluster 1 与用户 Alice 均位于澳大利亚。Alice 可以使用 Rancher UI 操作 User Cluster 1 中的资源,但她的请求必须从澳大利亚发送到美国的 Rancher Server,然后通过代理返回澳大利亚,即下游集群所在的位置。地理距离可能导致明显延迟,因此,Alice 可以使用授权集群端点来降低延迟。

为下游集群启用授权集群端点后,Rancher 会在 kubeconfig 文件中额外生成一段 Kubernetes 上下文,用于直连到集群。该文件具有 kubectl 和 helm的凭证。

如果 Rancher 出现问题,你需要使用此 kubeconfig 文件中定义的上下文来访问集群。因此,我们建议你导出 kubeconfig 文件,以便在 Rancher 出现问题时,仍能使用文件中的凭证访问集群。详情请参见使用 kubectl 和 kubeconfig 文件访问集群的章节。

配置 Kubernetes 集群的工具​

Rancher 使用什么工具配置下游集群,取决于集群的类型。

Rancher 为托管在云提供商中的节点启动 Kubernetes​

Rancher 可以动态启动云上(如 Amazon EC2、DigitalOcean、Azure 或 vSphere 等)的节点,然后在节点上安装 Kubernetes。

Rancher 使用 RKE 和 docker-machine 来配置这类型的集群。

Rancher 为自定义节点启动 Kubernetes​

在配置此类集群时,Rancher 会在现有节点上安装 Kubernetes,从而创建自定义集群。

Rancher 使用 RKE 来启动此类集群。

托管的 Kubernetes 提供商​

配置此类集群时,Kubernetes 由云提供商安装,如 GKE、ECS 或 AKS 等。

Rancher 使用 kontainer-engine 配置此类型的集群。

导入的 Kubernetes 集群​

这种情况下,Rancher 需要连接到一个设置好的 Kubernetes 集群。因此,Rancher 不提供 Kubernetes,只设置 Rancher Agent 实现与集群通信。

两种方式:

第一种:在rancher界面手动添加,这种简单不在阐述

第二种:rke方式然后导入

[root@nginx jettech]# cat jettech-cluster.yml 
nodes:- address: 172.16.10.59internal_address: 172.16.10.59user: wuborole: [controlplane, worker, etcd]ssh_key_path: /home/wubo/.ssh/id_rsaport: 22#- address: 172.16.10.33#  internal_address: 172.16.10.33#  user: wubo#  role: [etcd]#  ssh_key_path: /home/wubo/.ssh/id_rsa#  port: 22services:etcd:extra_args:auto-compaction-retention: 240 #(单位小时)quota-backend-bytes: '6442450944'backup_config:enabled: true         # 设置true启用ETCD自动备份,设置false禁用;interval_hours: 12    # 快照创建间隔时间,不加此参数,默认5分钟;retention: 6          # etcd备份保留份数;snapshot: truecreation: 6hretention: 24hingress:provider: nginxoptions:use-forwarded-headers: "true"#hostnetwork: truecluster_name: jettech
ignore_docker_version: true
prefix_path: /opt/rke
#kubernetes_version: v1.13.5-rancher1-2 #rke 0.2.2 https://github.com/rancher/rke/releases/tag/v1.1.0
#kubernetes_version: v1.17.4-rancher1-3 #rke 1.1.0
kubernetes_version: v1.20.10-rancher1-1 #rke 1.2.12network:plugin: calicomtu: 0options:flannel_backend_type: vxlanprivate_registries:- url: harbor.jettech.comuser: adminpassword: Harbor12345is_default: true

1.创建集群 

[root@nginx jettech]# rke up  --config jettech-cluster.yml

2.在rancher中导入集群,此时有证书问题

[root@k8s-node02 ~]# kubectl -n cattle-system get  all
NAME                                        READY   STATUS             RESTARTS   AGE
pod/cattle-cluster-agent-59996f9ff5-rkmnq   0/1     CrashLoopBackOff   5          5m3s
pod/cattle-cluster-agent-849d4d4f76-xmx6q   0/1     CrashLoopBackOff   5          5m3sNAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cattle-cluster-agent   0/1     1            0           23mNAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/cattle-cluster-agent-59996f9ff5   1         1         0       7m17s
replicaset.apps/cattle-cluster-agent-849d4d4f76   1         1         0       23m
[root@k8s-node02 ~]# kubectl logs  -n cattle-system  -f  pod/cattle-cluster-agent-59996f9ff5-rkmnqtime="2024-01-04T07:58:27Z" level=info msg="PublicKeyAlgorithm: RSA"
time="2024-01-04T07:58:27Z" level=error msg="Issuer of last certificate found in chain (CN=Kubernetes Ingress Controller Fake Certificate,O=Acme Co) does not match with CA certificate Issuer (CN=jetto.jettech.com,C=CN). Please check if the configured server certificate contains all needed intermediate certificates and make sure they are in the correct order (server certificate first, intermediates after)"
time="2024-01-04T07:58:27Z" level=fatal msg="Server certificate is not valid, please check if the host has the correct time configured and if the server certificate has a notAfter date and time in the future. Certificate information is displayed above. error: Get \"https://jetto.jettech.com\": x509: certificate has expired or is not yet valid: current time 2024-01-04T07:58:27Z is before 2024-01-04T14:39:27Z"

解决方案:

1)把在nginx节点上面的证书也就是jetto.jettech.com这个域名的证书copy到下游k8s集群上面。如果找不到上游的证书可以用下面方法找到证书

# 导出K8s访问密钥
echo $(kubectl config view --raw -oyaml | grep client-cert  |cut -d ' ' -f 6) |base64 -d > /tmp/jetto.jettech.com.crt
echo $(kubectl config view --raw -oyaml | grep client-key-data  |cut -d ' ' -f 6 ) |base64 -d > /tmp/jetto.jettech.com.key
echo $(kubectl config view --raw -oyaml | grep certificate-authority-data  |cut -d ' ' -f 6  ) |base64 -d > /tmp/cacerts.pem 

2)然后通过curl加证书形式导入集群

[root@k8s-node02 ok]# curl --cert $(pwd)/jetto.jettech.com.crt --key $(pwd)/jetto.jettech.com.key --cacert $(pwd)/cacerts.pem -sfL https://jetto.jettech.com/v3/import/sgn895dmg2zq7qgnr95h67wwk7p2dpf6knb428hk99f4cgt9tc64bn_c-k8nqc.yaml | kubectl apply -f -

效果图 

下游服务 

[root@k8s-node02 ok]# kubectl get all -A
NAMESPACE       NAME                                          READY   STATUS      RESTARTS   AGE
cattle-system   pod/cattle-cluster-agent-844fd7d6-l979m       1/1     Running     0          6m16s
fleet-system    pod/fleet-agent-7cc65df565-c5j2m              1/1     Running     0          5m53s
ingress-nginx   pod/default-http-backend-565f86f5f9-njjbx     1/1     Running     0          4h27m
ingress-nginx   pod/nginx-ingress-controller-5pz4v            1/1     Running     0          4h27m
kube-system     pod/calico-kube-controllers-b486cd75d-6pxpl   1/1     Running     0          4h27m
kube-system     pod/calico-node-5rhxg                         1/1     Running     0          4h27m
kube-system     pod/coredns-56fdbbcdfc-jpsnc                  1/1     Running     0          4h27m
kube-system     pod/coredns-autoscaler-5c64bb75c8-hqsgn       1/1     Running     0          4h27m
kube-system     pod/metrics-server-6b697547fc-k974b           1/1     Running     0          4h27m
kube-system     pod/rke-coredns-addon-deploy-job-jc899        0/1     Completed   0          4h27m
kube-system     pod/rke-ingress-controller-deploy-job-8rrh6   0/1     Completed   0          4h27m
kube-system     pod/rke-metrics-addon-deploy-job-qn7vm        0/1     Completed   0          4h27m
kube-system     pod/rke-network-plugin-deploy-job-7f5gj       0/1     Completed   0          4h28mNAMESPACE       NAME                           TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                  AGE
default         service/kubernetes             ClusterIP   10.43.0.1      <none>        443/TCP                  4h28m
ingress-nginx   service/default-http-backend   ClusterIP   10.43.28.42    <none>        80/TCP                   4h27m
kube-system     service/kube-dns               ClusterIP   10.43.0.10     <none>        53/UDP,53/TCP,9153/TCP   4h27m
kube-system     service/metrics-server         ClusterIP   10.43.226.15   <none>        443/TCP                  4h27mNAMESPACE       NAME                                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR            AGE
ingress-nginx   daemonset.apps/nginx-ingress-controller   1         1         1       1            1           <none>                   4h27m
kube-system     daemonset.apps/calico-node                1         1         1       1            1           kubernetes.io/os=linux   4h27mNAMESPACE       NAME                                      READY   UP-TO-DATE   AVAILABLE   AGE
cattle-system   deployment.apps/cattle-cluster-agent      1/1     1            1           6m32s
fleet-system    deployment.apps/fleet-agent               1/1     1            1           6m1s
ingress-nginx   deployment.apps/default-http-backend      1/1     1            1           4h27m
kube-system     deployment.apps/calico-kube-controllers   1/1     1            1           4h27m
kube-system     deployment.apps/coredns                   1/1     1            1           4h27m
kube-system     deployment.apps/coredns-autoscaler        1/1     1            1           4h27m
kube-system     deployment.apps/metrics-server            1/1     1            1           4h27mNAMESPACE       NAME                                                DESIRED   CURRENT   READY   AGE
cattle-system   replicaset.apps/cattle-cluster-agent-5c84b86698     0         0         0       6m32s
cattle-system   replicaset.apps/cattle-cluster-agent-844fd7d6       1         1         1       6m16s
fleet-system    replicaset.apps/fleet-agent-7cc65df565              1         1         1       5m53s
fleet-system    replicaset.apps/fleet-agent-f9d88479                0         0         0       6m1s
ingress-nginx   replicaset.apps/default-http-backend-565f86f5f9     1         1         1       4h27m
kube-system     replicaset.apps/calico-kube-controllers-b486cd75d   1         1         1       4h27m
kube-system     replicaset.apps/coredns-56fdbbcdfc                  1         1         1       4h27m
kube-system     replicaset.apps/coredns-autoscaler-5c64bb75c8       1         1         1       4h27m
kube-system     replicaset.apps/metrics-server-6b697547fc           1         1         1       4h27mNAMESPACE     NAME                                          COMPLETIONS   DURATION   AGE
kube-system   job.batch/rke-coredns-addon-deploy-job        1/1           2s         4h27m
kube-system   job.batch/rke-ingress-controller-deploy-job   1/1           7s         4h27m
kube-system   job.batch/rke-metrics-addon-deploy-job        1/1           1s         4h27m
kube-system   job.batch/rke-network-plugin-deploy-job       1/1           9s         4h28m

这篇关于RKE安装k8s及部署高可用rancher之证书私有证书但是内置的ssl不放到外置的LB中 4层负载均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/576763

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se