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.65
    internal_address: 192.168.1.65
    user: wubo
    role: [controlplane, worker, etcd]
    ssh_key_path: /home/wubo/.ssh/id_rsa
    port: 22

services:
  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: true
    creation: 6h
    retention: 24h

ingress:
  provider: nginx
#  options:
#    use-forwarded-headers: "true"
#  #hostnetwork: true

cluster_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.12

network:
  plugin: calico
  mtu: 0
  options:
    flannel_backend_type: vxlan

private_registries:
     - url: harbor.jettech.com
       user: admin
       password: Harbor12345
       is_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 DNS
                DNS: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/tls

Data
====
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          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

效果图:

为了达到最佳性能和安全性,我们建议你为 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.59
    internal_address: 172.16.10.59
    user: wubo
    role: [controlplane, worker, etcd]
    ssh_key_path: /home/wubo/.ssh/id_rsa
    port: 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: 22

services:
  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: true
    creation: 6h
    retention: 24h

ingress:
  provider: nginx
  options:
    use-forwarded-headers: "true"
  #hostnetwork: true

cluster_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.12

network:
  plugin: calico
  mtu: 0
  options:
    flannel_backend_type: vxlan

private_registries:
     - url: harbor.jettech.com
       user: admin
       password: Harbor12345
       is_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          5m3s

NAME                                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/cattle-cluster-agent   0/1     1            0           23m

NAME                                              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-rkmnq


time="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          4h28m

NAMESPACE       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                  4h27m

NAMESPACE       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   4h27m

NAMESPACE       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           4h27m

NAMESPACE       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       4h27m

NAMESPACE     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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/296949.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言学习NO.12-字符函数(二)-strcpy,strcat,strcmp长度不受限制的字符串函数

一、strcpy的使用和模拟实现 &#xff08;一&#xff09;strcpy使用 //strcpy的使用 #include <stdio.h>int main() {char arr1[] "abcdef";char arr2[10] "qwertt";char arr3[10] "okl";strcpy(arr2, arr1);printf("arr2 %s\n&…

数据结构和算法-插入排序(算法效率 折半优化 顺序表与链表插入排序 代码实现)

文章目录 插入排序算法实现算法效率分析优化-折半插入排序代码实现对链表进行插入排序小结 插入排序 首先49当作第一个已经排好序得元素&#xff0c;将第二个元素与前面得元素对比&#xff0c;发现小于49&#xff0c;于是49移动位置 此时将65与之前元素对比&#xff0c;发现其…

玩转Python:用Python处理文档,5个必备的库,特别实用,附代码

在Python中&#xff0c;有几个流行的库用于处理文档&#xff0c;包括解析、生成和操作文档内容。以下是一些常用的库及其简介和简单的代码示例&#xff1a; PyPDF2 - 用于处理PDF文件。 简介&#xff1a;PyPDF2是一个纯Python库&#xff0c;用于分割、合并、转换和提取PDF文件中…

C#,入门教程(09)——运算符的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(08)——基本数据类型及使用的基础知识https://blog.csdn.net/beijinghorn/article/details/123906998 一、算术运算符号 算术运算符号包括&#xff1a;四则运算 加 , 减-, 乘*, 除/与取模%。 // 加法&#xff0c;运算 int va 1 …

移动神器RAX3000M路由器不刷固件变身家庭云之六(高级应用):设置https

本系列文章&#xff1a; 移动神器RAX3000M路由器变身家庭云之一&#xff1a;开通SSH&#xff0c;安装新软件包 移动神器RAX3000M路由器变身家庭云之二&#xff1a;安装vsftpd 移动神器RAX3000M路由器变身家庭云之三&#xff1a;外网访问家庭云 移动神器RAX3000M路由器变身家庭云…

洗地机有必要买吗?2024好用的洗地机推荐

洗地机有必要吗&#xff1f;单答案是肯定的&#xff01;传统的家务劳动真的是耗时又枯燥&#xff0c;特别是地面清洁。要先扫一遍灰&#xff0c;然后用湿拖把先把地面全拖一遍&#xff0c;然后用干拖把把水渍再推一遍&#xff0c;最后还要忍着恶心去清洗拖把&#xff0c;费时费…

全网最全stable diffusion模型讲解!快来!!小白必收藏!!

手把手教你入门绘图超强的AI绘画程序Stable Diffusion&#xff0c;用户只需要输入一段图片的文字描述&#xff0c;即可生成精美的绘画。给大家带来了全新Stable Diffusion保姆级教程资料包&#xff08;文末可获取&#xff09; AI模型最新展现出的图像生成能力远远超出人们的预…

企业机密文件防泄密解决方案(具体执行时间表)

企业的机密文件是其核心竞争力的重要组成部分。一旦机密文件泄露&#xff0c;可能会给企业带来重大的经济损失和声誉损害。因此&#xff0c;企业需要采取有效的措施来保护机密文件的安全性。本文将介绍一种企业机密文件防泄密解决方案&#xff0c;帮助企业提高信息安全防护能力…

CentOS 8 8.5.2111 网络在线安装系统 —— 筑梦之路

之前写过一篇关于centos 8 官方停止更新维护后解决yum源问题的文章&#xff1a; CentOS 8 停止维护后换可用yum源——筑梦之路_http://ftp.iij.ad.jp/pub/linux/centos-vault/8.5.21-CSDN博客 由于centos 8 dvd的镜像比较大&#xff0c;有时候我们根本不需要去下载一个10G以上…

【数据库原理】(9)SQL简介

一.SQL 的发展历史 起源&#xff1a;SQL 起源于 1970 年代&#xff0c;由 IBM 的研究员 Edgar F. Codd 提出的关系模型概念演化而来。初期&#xff1a;Boyce 和 Chamberlin 在 IBM 开发了 SQUARE 语言的原型&#xff0c;后发展成为 SQL。这是为了更好地利用和管理关系数据库。…

iOS 解决push证书不受信任

重新下载&#xff1a;https://www.apple.com/certificateauthority/

手把手带你门SpringCloud

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是平顶山大师&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《手把手带你门SpringCloud开发之入门级及nacos…

在Flyway执行数据库脚本之前创建数据库

Flyway让我们不用手动执行sql脚本&#xff0c;但是众所周知&#xff0c;前提是要先创建项目的数据库。为了能够让运维的同事再偷一次懒&#xff0c;通过代码来自动完成数据库的创建&#xff0c;于是有了这篇文章的分享~ 要实现这个效果&#xff0c;只需要两步&#xff1a; 第一…

【Python机器学习】线性模型——lasso

除了岭回归&#xff0c;还有一种正则化的线性回归是lasso&#xff0c;与岭回归相同&#xff0c;使用lasso也是约束系数使其接近于0&#xff0c;但方法不同&#xff0c;叫做L1正则化。L1正则化的结果是使用lasso时某些系数刚好为0。说明某些特征被模型完全忽略。 同样以波士顿房…

企业防泄密软件超全图文解析!快来看!

防泄密软件作为保障企业信息安全的重要工具&#xff0c;其重要性不言而喻。本文将为您解析企业防泄密软件的方方面面&#xff0c;帮助您了解如何选择适合自己企业的防泄密软件。 一、泄密的渠道有哪些 1、外部入侵&#xff1a;黑客攻击、病毒感染等外部因素可能导致企业的数据…

Vue脚手架及组件开发

组件插槽: 路由数据传递&#xff1a;

ubuntu20.04安装cuda11.7和显卡驱动

1、禁用nouveau sudo vi /etc/modprobe.d/nouveau.conf 在最下面加入blacklist nouveau sudo update-initramfs -u sudo reboot 输入命令&#xff0c;如果没有任何输出&#xff0c;证明禁用成功 lsmod | grep nouveau 2、安装cuda11.7 CUDA Toolkit Archive | NVIDIA Deve…

ubuntu 22 virt-manger(kvm)安装winxp; ubuntu22体验 firebird3.0

安装 、启动 virt-manager sudo apt install virt-manager sudo systemctl start libvirtdsudo virt-manager安装windowsXP 安装过程截图如下 要点1 启用 “包括寿终正寝的操作系统” win_xp.iso 安装过程 &#xff1a; 从winXp.iso启动, 执行完自己重启从硬盘重启&#xff0c…

高压放大器输出接法及其注意事项

高压放大器应用场景非常广泛&#xff0c;非常适用于半导体高压驱动、TFT产业高压驱动、各种高压工程等应用&#xff1b;也很适用当作音频信号产生器或函数波形产生器的波形放大使用。使用场景广泛&#xff0c;放大器的输出接法也多种&#xff0c;对于不同的放大器也有对应的输出…

【漏洞复现】ActiveMQ反序列化漏洞(CVE-2015-5254)

Nx01 产品简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件。ActiveMQ是消息队列服务&#xff0c;是面向消息中间件&#xff08;MOM&#xff09;的最终实现&#xff0c;它为企业消息传递提供高可用、出色性能、可扩展、稳定和安全保障。 Nx02 漏洞描述 Re…