:::important 重要提示 RKE add-on 安装仅支持 Rancher v2.0.8 之前的版本。 请使用 Rancher helm chart 将 Rancher 安装在 Kubernetes 集群上。有关详细信息,请参见Rancher 高可用安装。 如果您当前正在使用 RKE add-on 安装方法,参见将 RKE add-on 安装的 Rancher 迁移到 Helm 安装,获取有关如何使用 Helm chart 的详细信息。 :::

此过程将引导您使用 Rancher Kubernetes Engine(RKE)设置 3 节点集群。该集群的唯一目的是为 Rancher 运行 Pod。设置基于:

在使用四层负载均衡器的 HA 设置中,负载均衡器通过 TCP/UDP 协议接受 Rancher 客户端连接,然后,负载均衡器将这些连接转发到各个集群节点,而不读取请求本身。由于负载均衡器无法读取其转发的数据包,因此它所能做出的路由决策是有限的。

Rancher 安装在具有四层负载均衡器的 Kubernetes 集群上,描述了在 ingress 控制器上的 SSL termination。

Rancher HA

1. 提供 Linux 主机

按照要求配置三台 Linux 主机。

2. 配置负载均衡器

我们将使用 NGINX 作为我们的四层负载均衡器(TCP),NGINX 将所有连接转发到您的 Rancher 节点之一。如果要使用 Amazon NLB,则可以跳过此步骤并使用Amazon NLB 配置

注意: 在此配置中,负载均衡器位于 Linux 主机的前面,负载均衡器可以是任何可用的能够运行 NGINX 的主机。

一个警告:不要将 Rancher 节点之一用作负载均衡器。

2.1 安装 NGINX

首先在负载均衡器主机上安装 NGINX,NGINX 为所有已知的操作系统提供了可用的安装包。有关安装 NGINX 的帮助,请参阅安装文档

在使用官方 NGINX 软件包时,stream模块是必需的。请参考您的操作系统文档,了解如何在操作系统上安装和启用 NGINX stream模块。

2.2 创建 NGINX 配置

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

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

  2. nginx.conf中的IP_NODE_1IP_NODE_2IP_NODE_3替换为您的 Linux 主机 IP 地址。

    注意: 此 Nginx 配置仅是示例,可能不适合您的环境。有关完整的文档,请参阅NGINX 负载均衡-TCP 和 UDP 负载均衡器

    NGINX 配置示例:

    1. worker_processes 4;
    2. worker_rlimit_nofile 40000;
    3. events {
    4. worker_connections 8192;
    5. }
    6. http {
    7. server {
    8. listen 80;
    9. return 301 https://$host$request_uri;
    10. }
    11. }
    12. stream {
    13. upstream rancher_servers {
    14. least_conn;
    15. server IP_NODE_1:443 max_fails=3 fail_timeout=5s;
    16. server IP_NODE_2:443 max_fails=3 fail_timeout=5s;
    17. server IP_NODE_3:443 max_fails=3 fail_timeout=5s;
    18. }
    19. server {
    20. listen 443;
    21. proxy_pass rancher_servers;
    22. }
    23. }
  3. 保存nginx.conf到负载均衡器的以下路径:/etc/nginx/nginx.conf

  4. 通过运行以下命令更新加载您的 NGINX 配置:

    1. # nginx -s reload

2.3 可选 - 将 NGINX 作为 Docker 容器运行

与其将 NGINX 作为包安装在操作系统上,不如将其作为 Docker 容器运行。将已编辑的NGINX 配置示例保存为/etc/nginx.conf,并运行以下命令以启动 NGINX 容器:

  1. docker run -d --restart=unless-stopped \
  2. -p 80:80 -p 443:443 \
  3. -v /etc/nginx.conf:/etc/nginx/nginx.conf \
  4. nginx:1.14

3. 配置 DNS

选择要用于访问 Rancher 的完全限定域名(FQDN)(例如,rancher.yourdomain.com)。

  1. 登录到 DNS 服务器,创建一个指向您的[负载均衡器]的 IP 地址的DNS A记录(#2-configure-load-balancer)。

  2. 验证DNS A是否正常工作,在任何终端上运行以下命令,替换HOSTNAME.DOMAIN.COM为您选择的 FQDN:

    nslookup HOSTNAME.DOMAIN.COM

    步骤结果: 终端显示输出如下图所示:

    1. $ nslookup rancher.yourdomain.com
    2. Server: YOUR_HOSTNAME_IP_ADDRESS
    3. Address: YOUR_HOSTNAME_IP_ADDRESS#53
    4. Non-authoritative answer:
    5. Name: rancher.yourdomain.com
    6. Address: HOSTNAME.DOMAIN.COM

4. 安装 RKE

RKE(Rancher Kubernetes 引擎)是一个快速、通用的 Kubernetes 安装程序,您可以使用它在您的 Linux 主机上安装 Kubernetes。我们将使用 RKE 来设置集群并运行 Rancher。

  1. 请遵循RKE 安装说明。

  2. 通过运行以下命令,确认 RKE 现在是可执行的:

    1. rke --version

5. 下载 RKE 配置文件模板

RKE 使用.yml配置文件来安装和配置 Kubernetes 集群。根据要使用的 SSL 证书,有两种模板可供选择。

  1. 根据您正在使用的 SSL 证书,下载以下模板之一。

    高级配置选项:

    • 想要 Rancher API 的所有事务记录?通过编辑 RKE 配置文件来启用API 审核功能。有关更多信息,请参见如何在RKE 配置文件中启用它。
    • 想知道您的 RKE 模板可用的其他配置选项吗?请参阅RKE 文档:配置选项
  2. 将文件重命名为rancher-cluster.yml

6. 配置节点

有了rancher-cluster.yml配置文件模板后,编辑节点部分以指向您的 Linux 主机。

  1. 在您喜欢的文本编辑器中打开rancher-cluster.yml

  2. 使用 Linux 主机信息更新nodes部分

    对于集群中的每个节点,更新以下占位符:IP_ADDRESS_XUSER。指定的用户应该能够访问 Docket 套接字,您可以使用指定的用户登录并运行docker ps来测试这一点。

    注意: 使用 RHEL/CentOS 时,由于 https://bugzilla.redhat.com/show_bug.cgi?id=1527565 导致 SSH 用户无法成为 root 用户。有关 RHEL/CentOS 的特定需求,请参阅操作系统要求

    1. nodes:
    2. # The IP address or hostname of the node
    3. - address: IP_ADDRESS_1
    4. # User that can login to the node and has access to the Docker socket (i.e. can execute `docker ps` on the node)
    5. # When using RHEL/CentOS, this can't be root due to https://bugzilla.redhat.com/show_bug.cgi?id=1527565
    6. user: USER
    7. role: [controlplane,etcd,worker]
    8. # Path the SSH key that can be used to access to node with the specified user
    9. ssh_key_path: ~/.ssh/id_rsa
    10. - address: IP_ADDRESS_2
    11. user: USER
    12. role: [controlplane,etcd,worker]
    13. ssh_key_path: ~/.ssh/id_rsa
    14. - address: IP_ADDRESS_3
    15. user: USER
    16. role: [controlplane,etcd,worker]
    17. ssh_key_path: ~/.ssh/id_rsa
  3. 可选: 默认情况下,rancher-cluster.yml被配置为备份您的数据快照,要禁用这些快照,请将backup指令设置更改为false,如下所示。

    1. services:
    2. etcd:
    3. backup: false

7. 配置证书

为了安全起见,使用 Rancher 时需要 SSL(Secure Sockets Layer)。SSL 保护所有 Rancher 网络通信的安全,例如在您登录集群或与集群交互时。

从以下选项中选择:

7.1 — 使用您已有的证书:自签名

先决条件: 创建一个自签名证书

  • 证书文件必须为PEM 格式
  • 证书文件必须使用base64编码。
  • 在您的证书文件中,包括链接中的所有中间证书。请先使用证书订购证书,然后再订购中间体。有关示例,请参见中间证书
  1. kind: Secretname: cattle-keys-ingress

    • 替换<BASE64_CRT>为证书文件的 base64 编码字符串(通常称为cert.pemdomain.crt)
    • 替换<BASE64_KEY>为证书密钥文件的 base64 编码字符串(通常称为key.pemdomain.key)

    注意: tls.crttls.key的 base64 编码的字符串应该在同一行,在开头、中间或结尾没有任何换行。

    步骤结果: 在替换了这些值之后,文件应该如下面的示例所示(base64 编码的字符串应该不同):

    1. ---
    2. apiVersion: v1
    3. kind: Secret
    4. metadata:
    5. name: cattle-keys-ingress
    6. namespace: cattle-system
    7. type: Opaque
    8. data:
    9. tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1RENDQWN5Z0F3SUJBZ0lKQUlHc25NeG1LeGxLTUEwR0NTcUdTSWIzRFFFQkN3VUFNQkl4RURBT0JnTlYKQkFNTUIzUmxjM1F0WTJFd0hoY05NVGd3TlRBMk1qRXdOREE1V2hjTk1UZ3dOekExTWpFd05EQTVXakFXTVJRdwpFZ1lEVlFRRERBdG9ZUzV5Ym1Ob2NpNXViRENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DCmdnRUJBTFJlMXdzekZSb2Rib2pZV05DSHA3UkdJaUVIMENDZ1F2MmdMRXNkUUNKZlcrUFEvVjM0NnQ3bSs3TFEKZXJaV3ZZMWpuY2VuWU5JSGRBU0VnU0ducWExYnhUSU9FaE0zQXpib3B0WDhjSW1OSGZoQlZETGdiTEYzUk0xaQpPM1JLTGdIS2tYSTMxZndjbU9zWGUwaElYQnpUbmxnM20vUzlXL3NTc0l1dDVwNENDUWV3TWlpWFhuUElKb21lCmpkS3VjSHFnMTlzd0YvcGVUalZrcVpuMkJHazZRaWFpMU41bldRV0pjcThTenZxTTViZElDaWlwYU9hWWQ3RFEKYWRTejV5dlF0YkxQNW4wTXpnOU43S3pGcEpvUys5QWdkWDI5cmZqV2JSekp3RzM5R3dRemN6VWtLcnZEb05JaQo0UFJHc01yclFNVXFSYjRSajNQOEJodEMxWXNDQXdFQUFhTTVNRGN3Q1FZRFZSMFRCQUl3QURBTEJnTlZIUThFCkJBTUNCZUF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdJR0NDc0dBUVVGQndNQk1BMEdDU3FHU0liM0RRRUIKQ3dVQUE0SUJBUUNKZm5PWlFLWkowTFliOGNWUW5Vdi9NZkRZVEJIQ0pZcGM4MmgzUGlXWElMQk1jWDhQRC93MgpoOUExNkE4NGNxODJuQXEvaFZYYy9JNG9yaFY5WW9jSEg5UlcvbGthTUQ2VEJVR0Q1U1k4S292MHpHQ1ROaDZ6Ci9wZTNqTC9uU0pYSjRtQm51czJheHFtWnIvM3hhaWpYZG9kMmd3eGVhTklvRjNLbHB2aGU3ZjRBNmpsQTM0MmkKVVlCZ09iN1F5KytRZWd4U1diSmdoSzg1MmUvUUhnU2FVSkN6NW1sNGc1WndnNnBTUXhySUhCNkcvREc4dElSYwprZDMxSk1qY25Fb1Rhc1Jyc1NwVmNGdXZyQXlXN2liakZyYzhienBNcE1obDVwYUZRcEZzMnIwaXpZekhwakFsCk5ZR2I2OHJHcjBwQkp3YU5DS2ErbCtLRTk4M3A3NDYwCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
    10. tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdEY3WEN6TVZHaDF1aU5oWTBJZW50RVlpSVFmUUlLQkMvYUFzU3gxQUlsOWI0OUQ5ClhmanEzdWI3c3RCNnRsYTlqV09keDZkZzBnZDBCSVNCSWFlcHJWdkZNZzRTRXpjRE51aW0xZnh3aVkwZCtFRlUKTXVCc3NYZEV6V0k3ZEVvdUFjcVJjamZWL0J5WTZ4ZDdTRWhjSE5PZVdEZWI5TDFiK3hLd2k2M21uZ0lKQjdBeQpLSmRlYzhnbWlaNk4wcTV3ZXFEWDJ6QVgrbDVPTldTcG1mWUVhVHBDSnFMVTNtZFpCWWx5cnhMTytvemx0MGdLCktLbG81cGgzc05CcDFMUG5LOUMxc3MvbWZRek9EMDNzck1Xa21oTDcwQ0IxZmIydCtOWnRITW5BYmYwYkJETnoKTlNRcXU4T2cwaUxnOUVhd3l1dEF4U3BGdmhHUGMvd0dHMExWaXdJREFRQUJBb0lCQUJKYUErOHp4MVhjNEw0egpwUFd5bDdHVDRTMFRLbTNuWUdtRnZudjJBZXg5WDFBU2wzVFVPckZyTnZpK2xYMnYzYUZoSFZDUEN4N1RlMDVxClhPa2JzZnZkZG5iZFQ2RjgyMnJleVByRXNINk9TUnBWSzBmeDVaMDQwVnRFUDJCWm04eTYyNG1QZk1vbDdya2MKcm9Kd09rOEVpUHZZekpsZUd0bTAwUm1sRysyL2c0aWJsOTVmQXpyc1MvcGUyS3ZoN2NBVEtIcVh6MjlpUmZpbApiTGhBamQwcEVSMjNYU0hHR1ZqRmF3amNJK1c2L2RtbDZURDhrSzFGaUtldmJKTlREeVNXQnpPbXRTYUp1K01JCm9iUnVWWG4yZVNoamVGM1BYcHZRMWRhNXdBa0dJQWxOWjRHTG5QU2ZwVmJyU0plU3RrTGNzdEJheVlJS3BWZVgKSVVTTHM0RUNnWUVBMmNnZUE2WHh0TXdFNU5QWlNWdGhzbXRiYi9YYmtsSTdrWHlsdk5zZjFPdXRYVzkybVJneQpHcEhUQ0VubDB0Z1p3T081T1FLNjdFT3JUdDBRWStxMDJzZndwcmgwNFZEVGZhcW5QNTBxa3BmZEJLQWpmanEyCjFoZDZMd2hLeDRxSm9aelp2VkowV0lvR1ZLcjhJSjJOWGRTUVlUanZUZHhGczRTamdqNFFiaEVDZ1lFQTFBWUUKSEo3eVlza2EvS2V2OVVYbmVrSTRvMm5aYjJ1UVZXazRXSHlaY2NRN3VMQVhGY3lJcW5SZnoxczVzN3RMTzJCagozTFZNUVBzazFNY25oTTl4WE4vQ3ZDTys5b2t0RnNaMGJqWFh6NEJ5V2lFNHJPS1lhVEFwcDVsWlpUT3ZVMWNyCm05R3NwMWJoVDVZb2RaZ3IwUHQyYzR4U2krUVlEWnNFb2lFdzNkc0NnWUVBcVJLYWNweWZKSXlMZEJjZ0JycGkKQTRFalVLMWZsSjR3enNjbGFKUDVoM1NjZUFCejQzRU1YT0kvSXAwMFJsY3N6em83N3cyMmpud09mOEJSM0RBMwp6ZTRSWDIydWw4b0hGdldvdUZOTTNOZjNaNExuYXpVc0F0UGhNS2hRWGMrcEFBWGthUDJkZzZ0TU5PazFxaUNHCndvU212a1BVVE84b1ViRTB1NFZ4ZmZFQ2dZQUpPdDNROVNadUlIMFpSSitIV095enlOQTRaUEkvUkhwN0RXS1QKajVFS2Y5VnR1OVMxY1RyOTJLVVhITXlOUTNrSjg2OUZPMnMvWk85OGg5THptQ2hDTjhkOWN6enI5SnJPNUFMTApqWEtBcVFIUlpLTFgrK0ZRcXZVVlE3cTlpaHQyMEZPb3E5OE5SZDMzSGYxUzZUWDNHZ3RWQ21YSml6dDAxQ3ZHCmR4VnVnd0tCZ0M2Mlp0b0RLb3JyT2hvdTBPelprK2YwQS9rNDJBOENiL29VMGpwSzZtdmxEWmNYdUF1QVZTVXIKNXJCZjRVYmdVYndqa1ZWSFR6LzdDb1BWSjUvVUxJWk1Db1RUNFprNTZXWDk4ZE93Q3VTVFpZYnlBbDZNS1BBZApTZEpuVVIraEpnSVFDVGJ4K1dzYnh2d0FkbWErWUhtaVlPRzZhSklXMXdSd1VGOURLUEhHCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
  2. kind: Secretname: cattle-keys-server,替换<BASE64_CA>为 CA 证书文件的 base64 编码的字符串(通常称为ca.pemca.crt)。

    注意: cacerts.pem的 base64 编码的字符串应该在同一行,在开头、中间或结尾没有任何换行。

    步骤结果: 文件应该如下面的示例所示(base64 编码的字符串应该不同):

    1. ---
    2. apiVersion: v1
    3. kind: Secret
    4. metadata:
    5. name: cattle-keys-server
    6. namespace: cattle-system
    7. type: Opaque
    8. data:
    9. cacerts.pem: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNvRENDQVlnQ0NRRHVVWjZuMEZWeU16QU5CZ2txaGtpRzl3MEJBUXNGQURBU01SQXdEZ1lEVlFRRERBZDAKWlhOMExXTmhNQjRYRFRFNE1EVXdOakl4TURRd09Wb1hEVEU0TURjd05USXhNRFF3T1Zvd0VqRVFNQTRHQTFVRQpBd3dIZEdWemRDMWpZVENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFNQmpBS3dQCndhRUhwQTdaRW1iWWczaTNYNlppVmtGZFJGckJlTmFYTHFPL2R0RUdmWktqYUF0Wm45R1VsckQxZUlUS3UzVHgKOWlGVlV4Mmo1Z0tyWmpwWitCUnFiZ1BNbk5hS1hocmRTdDRtUUN0VFFZdGRYMVFZS0pUbWF5NU45N3FoNTZtWQprMllKRkpOWVhHWlJabkdMUXJQNk04VHZramF0ZnZOdmJ0WmtkY2orYlY3aWhXanp2d2theHRUVjZlUGxuM2p5CnJUeXBBTDliYnlVcHlad3E2MWQvb0Q4VUtwZ2lZM1dOWmN1YnNvSjhxWlRsTnN6UjVadEFJV0tjSE5ZbE93d2oKaG41RE1tSFpwZ0ZGNW14TU52akxPRUc0S0ZRU3laYlV2QzlZRUhLZTUxbGVxa1lmQmtBZWpPY002TnlWQUh1dApuay9DMHpXcGdENkIwbkVDQXdFQUFUQU5CZ2txaGtpRzl3MEJBUXNGQUFPQ0FRRUFHTCtaNkRzK2R4WTZsU2VBClZHSkMvdzE1bHJ2ZXdia1YxN3hvcmlyNEMxVURJSXB6YXdCdFJRSGdSWXVtblVqOGo4T0hFWUFDUEthR3BTVUsKRDVuVWdzV0pMUUV0TDA2eTh6M3A0MDBrSlZFZW9xZlVnYjQrK1JLRVJrWmowWXR3NEN0WHhwOVMzVkd4NmNOQQozZVlqRnRQd2hoYWVEQmdma1hXQWtISXFDcEsrN3RYem9pRGpXbi8walI2VDcrSGlaNEZjZ1AzYnd3K3NjUDIyCjlDQVZ1ZFg4TWpEQ1hTcll0Y0ZINllBanlCSTJjbDhoSkJqa2E3aERpVC9DaFlEZlFFVFZDM3crQjBDYjF1NWcKdE03Z2NGcUw4OVdhMnp5UzdNdXk5bEthUDBvTXl1Ty82Tm1wNjNsVnRHeEZKSFh4WTN6M0lycGxlbTNZQThpTwpmbmlYZXc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==

7.2 — 使用您已有的证书:由公认的 CA 签发

注意: 如果您使用的是自签名证书,单击此处继续。

如果您使用的是由公认的证书颁发机构签名的证书,您需要为证书文件和证书密钥文件生成 base64 编码的字符串。确保您的证书文件包括链接中的所有中间证书,在这种情况下,证书的顺序首先是您已有的证书,然后是中间证书。请参阅您的 CSP(Certificate Service Provider)文档,了解需要包括哪些中间证书。

kind: Secretname: cattle-keys-ingress

  • 替换<BASE64_CRT>为证书文件的 base64 编码字符串(通常称为cert.pemdomain.crt)
  • 替换<BASE64_KEY>为证书密钥文件的 base64 编码字符串(通常称为key.pemdomain.key)

在替换了这些值之后,文件应该如下面的示例所示(base64 编码的字符串应该不同):

注意: tls.crttls.key的 base64 编码的字符串应该在同一行,在开头、中间或结尾没有任何换行。

  1. ---
  2. apiVersion: v1
  3. kind: Secret
  4. metadata:
  5. name: cattle-keys-ingress
  6. namespace: cattle-system
  7. type: Opaque
  8. data:
  9. tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1RENDQWN5Z0F3SUJBZ0lKQUlHc25NeG1LeGxLTUEwR0NTcUdTSWIzRFFFQkN3VUFNQkl4RURBT0JnTlYKQkFNTUIzUmxjM1F0WTJFd0hoY05NVGd3TlRBMk1qRXdOREE1V2hjTk1UZ3dOekExTWpFd05EQTVXakFXTVJRdwpFZ1lEVlFRRERBdG9ZUzV5Ym1Ob2NpNXViRENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DCmdnRUJBTFJlMXdzekZSb2Rib2pZV05DSHA3UkdJaUVIMENDZ1F2MmdMRXNkUUNKZlcrUFEvVjM0NnQ3bSs3TFEKZXJaV3ZZMWpuY2VuWU5JSGRBU0VnU0ducWExYnhUSU9FaE0zQXpib3B0WDhjSW1OSGZoQlZETGdiTEYzUk0xaQpPM1JLTGdIS2tYSTMxZndjbU9zWGUwaElYQnpUbmxnM20vUzlXL3NTc0l1dDVwNENDUWV3TWlpWFhuUElKb21lCmpkS3VjSHFnMTlzd0YvcGVUalZrcVpuMkJHazZRaWFpMU41bldRV0pjcThTenZxTTViZElDaWlwYU9hWWQ3RFEKYWRTejV5dlF0YkxQNW4wTXpnOU43S3pGcEpvUys5QWdkWDI5cmZqV2JSekp3RzM5R3dRemN6VWtLcnZEb05JaQo0UFJHc01yclFNVXFSYjRSajNQOEJodEMxWXNDQXdFQUFhTTVNRGN3Q1FZRFZSMFRCQUl3QURBTEJnTlZIUThFCkJBTUNCZUF3SFFZRFZSMGxCQll3RkFZSUt3WUJCUVVIQXdJR0NDc0dBUVVGQndNQk1BMEdDU3FHU0liM0RRRUIKQ3dVQUE0SUJBUUNKZm5PWlFLWkowTFliOGNWUW5Vdi9NZkRZVEJIQ0pZcGM4MmgzUGlXWElMQk1jWDhQRC93MgpoOUExNkE4NGNxODJuQXEvaFZYYy9JNG9yaFY5WW9jSEg5UlcvbGthTUQ2VEJVR0Q1U1k4S292MHpHQ1ROaDZ6Ci9wZTNqTC9uU0pYSjRtQm51czJheHFtWnIvM3hhaWpYZG9kMmd3eGVhTklvRjNLbHB2aGU3ZjRBNmpsQTM0MmkKVVlCZ09iN1F5KytRZWd4U1diSmdoSzg1MmUvUUhnU2FVSkN6NW1sNGc1WndnNnBTUXhySUhCNkcvREc4dElSYwprZDMxSk1qY25Fb1Rhc1Jyc1NwVmNGdXZyQXlXN2liakZyYzhienBNcE1obDVwYUZRcEZzMnIwaXpZekhwakFsCk5ZR2I2OHJHcjBwQkp3YU5DS2ErbCtLRTk4M3A3NDYwCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
  10. tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBdEY3WEN6TVZHaDF1aU5oWTBJZW50RVlpSVFmUUlLQkMvYUFzU3gxQUlsOWI0OUQ5ClhmanEzdWI3c3RCNnRsYTlqV09keDZkZzBnZDBCSVNCSWFlcHJWdkZNZzRTRXpjRE51aW0xZnh3aVkwZCtFRlUKTXVCc3NYZEV6V0k3ZEVvdUFjcVJjamZWL0J5WTZ4ZDdTRWhjSE5PZVdEZWI5TDFiK3hLd2k2M21uZ0lKQjdBeQpLSmRlYzhnbWlaNk4wcTV3ZXFEWDJ6QVgrbDVPTldTcG1mWUVhVHBDSnFMVTNtZFpCWWx5cnhMTytvemx0MGdLCktLbG81cGgzc05CcDFMUG5LOUMxc3MvbWZRek9EMDNzck1Xa21oTDcwQ0IxZmIydCtOWnRITW5BYmYwYkJETnoKTlNRcXU4T2cwaUxnOUVhd3l1dEF4U3BGdmhHUGMvd0dHMExWaXdJREFRQUJBb0lCQUJKYUErOHp4MVhjNEw0egpwUFd5bDdHVDRTMFRLbTNuWUdtRnZudjJBZXg5WDFBU2wzVFVPckZyTnZpK2xYMnYzYUZoSFZDUEN4N1RlMDVxClhPa2JzZnZkZG5iZFQ2RjgyMnJleVByRXNINk9TUnBWSzBmeDVaMDQwVnRFUDJCWm04eTYyNG1QZk1vbDdya2MKcm9Kd09rOEVpUHZZekpsZUd0bTAwUm1sRysyL2c0aWJsOTVmQXpyc1MvcGUyS3ZoN2NBVEtIcVh6MjlpUmZpbApiTGhBamQwcEVSMjNYU0hHR1ZqRmF3amNJK1c2L2RtbDZURDhrSzFGaUtldmJKTlREeVNXQnpPbXRTYUp1K01JCm9iUnVWWG4yZVNoamVGM1BYcHZRMWRhNXdBa0dJQWxOWjRHTG5QU2ZwVmJyU0plU3RrTGNzdEJheVlJS3BWZVgKSVVTTHM0RUNnWUVBMmNnZUE2WHh0TXdFNU5QWlNWdGhzbXRiYi9YYmtsSTdrWHlsdk5zZjFPdXRYVzkybVJneQpHcEhUQ0VubDB0Z1p3T081T1FLNjdFT3JUdDBRWStxMDJzZndwcmgwNFZEVGZhcW5QNTBxa3BmZEJLQWpmanEyCjFoZDZMd2hLeDRxSm9aelp2VkowV0lvR1ZLcjhJSjJOWGRTUVlUanZUZHhGczRTamdqNFFiaEVDZ1lFQTFBWUUKSEo3eVlza2EvS2V2OVVYbmVrSTRvMm5aYjJ1UVZXazRXSHlaY2NRN3VMQVhGY3lJcW5SZnoxczVzN3RMTzJCagozTFZNUVBzazFNY25oTTl4WE4vQ3ZDTys5b2t0RnNaMGJqWFh6NEJ5V2lFNHJPS1lhVEFwcDVsWlpUT3ZVMWNyCm05R3NwMWJoVDVZb2RaZ3IwUHQyYzR4U2krUVlEWnNFb2lFdzNkc0NnWUVBcVJLYWNweWZKSXlMZEJjZ0JycGkKQTRFalVLMWZsSjR3enNjbGFKUDVoM1NjZUFCejQzRU1YT0kvSXAwMFJsY3N6em83N3cyMmpud09mOEJSM0RBMwp6ZTRSWDIydWw4b0hGdldvdUZOTTNOZjNaNExuYXpVc0F0UGhNS2hRWGMrcEFBWGthUDJkZzZ0TU5PazFxaUNHCndvU212a1BVVE84b1ViRTB1NFZ4ZmZFQ2dZQUpPdDNROVNadUlIMFpSSitIV095enlOQTRaUEkvUkhwN0RXS1QKajVFS2Y5VnR1OVMxY1RyOTJLVVhITXlOUTNrSjg2OUZPMnMvWk85OGg5THptQ2hDTjhkOWN6enI5SnJPNUFMTApqWEtBcVFIUlpLTFgrK0ZRcXZVVlE3cTlpaHQyMEZPb3E5OE5SZDMzSGYxUzZUWDNHZ3RWQ21YSml6dDAxQ3ZHCmR4VnVnd0tCZ0M2Mlp0b0RLb3JyT2hvdTBPelprK2YwQS9rNDJBOENiL29VMGpwSzZtdmxEWmNYdUF1QVZTVXIKNXJCZjRVYmdVYndqa1ZWSFR6LzdDb1BWSjUvVUxJWk1Db1RUNFprNTZXWDk4ZE93Q3VTVFpZYnlBbDZNS1BBZApTZEpuVVIraEpnSVFDVGJ4K1dzYnh2d0FkbWErWUhtaVlPRzZhSklXMXdSd1VGOURLUEhHCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==

8. 配置 FQDN

<FQDN>在配置文件中有两处引用(一个在这个步骤中,一个在下一个步骤中)。两者都需要替换为配置 DNS 中选择的 FQDN。

kind: Ingressname: cattle-ingress-http

  • 替换<FQDN>为配置 DNS 中选择的 FQDN。

<FQDN>替换为配置 DNS 中选择的 FQDN 后,该文件应类似于以下示例(本例中使用的 FQDN 是rancher.yourdomain.com):

  1. ---
  2. apiVersion: extensions/v1beta1
  3. kind: Ingress
  4. metadata:
  5. namespace: cattle-system
  6. name: cattle-ingress-http
  7. annotations:
  8. nginx.ingress.kubernetes.io/proxy-connect-timeout: "30"
  9. nginx.ingress.kubernetes.io/proxy-read-timeout: "1800" # Max time in seconds for ws to remain shell window open
  10. nginx.ingress.kubernetes.io/proxy-send-timeout: "1800" # Max time in seconds for ws to remain shell window open
  11. spec:
  12. rules:
  13. - host: rancher.yourdomain.com
  14. http:
  15. paths:
  16. - backend:
  17. serviceName: cattle-service
  18. servicePort: 80
  19. tls:
  20. - secretName: cattle-keys-ingress
  21. hosts:
  22. - rancher.yourdomain.com

保存.yml文件并关闭它。

9. 配置 Rancher 版本

最后一个需要替换的引用是<RANCHER_VERSION>,这需要替换为标记为稳定的 Rancher 版本。最新的 Rancher 稳定版本可以在GitHub README中找到。确保版本是实际的版本号,而不是带有stablelatest这样的命名标签。下面的示例显示了配置为v2.0.6的版本。

  1. spec:
  2. serviceAccountName: cattle-admin
  3. containers:
  4. - image: rancher/rancher:v2.0.6
  5. imagePullPolicy: Always

10. 备份 RKE 配置文件

关闭.yml文件后,将其备份到安全位置。升级 Rancher 时,可以再次使用此文件。

11. 运行 RKE

完成所有配置后,使用 RKE 启动 Rancher。您可以通过运行rke up命令并使用--config参数指向您的配置文件来完成此操作。

  1. 在您的工作站中,确保rancher-cluster.yml和下载的rke二进制文件位于同一目录中。

  2. 打开一个终端实例,切换到包含您的配置文件和rke的目录。

  3. 请输入下面的rke up命令。

  1. rke up --config rancher-cluster.yml

步骤结果: 输出应与以下代码段相似:

  1. INFO[0000] Building Kubernetes cluster
  2. INFO[0000] [dialer] Setup tunnel for host [1.1.1.1]
  3. INFO[0000] [network] Deploying port listener containers
  4. INFO[0000] [network] Pulling image [alpine:latest] on host [1.1.1.1]
  5. ...
  6. INFO[0101] Finished building Kubernetes cluster successfully

12. 备份自动生成的配置文件

在安装过程中,RKE 会自动生成一个与 RKE 二进制文件位于同一目录中的名为kube_config_rancher-cluster.yml的配置文件。复制此文件并将其备份到安全位置,稍后在升级 Rancher Server 时将使用此文件。

后续操作

您有两种选择:

常见问题和故障排查

如何知道我的证书是不是 PEM 格式?

您可以通过以下特征识别 PEM 格式:

  • 该文件以以下标头开头:-----BEGIN CERTIFICATE-----
  • 标头后跟一长串字符。
  • 该文件以页脚结尾:-----END CERTIFICATE-----

PEM 证书例子:

  1. ----BEGIN CERTIFICATE-----
  2. MIIGVDCCBDygAwIBAgIJAMiIrEm29kRLMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNV
  3. ... more lines
  4. VWQqljhfacYPgp8KJUJENQ9h5hZ2nSCrI+W00Jcw4QcEdCI8HL5wmg==
  5. -----END CERTIFICATE-----

如何通过 base64 编码我的 PEM 文件?

运行以下命令之一。将FILENAME替换为您的证书名称。

  1. # MacOS
  2. cat FILENAME | base64
  3. # Linux
  4. cat FILENAME | base64 -w0
  5. # Windows
  6. certutil -encode FILENAME FILENAME.base64

如何验证生成的证书的 base64 字符串?

运行以下命令之一。用之前复制的 base64 字符串替换 YOUR_BASE64_STRING

  1. # MacOS
  2. echo YOUR_BASE64_STRING | base64 -D
  3. # Linux
  4. echo YOUR_BASE64_STRING | base64 -d
  5. # Windows
  6. certutil -decode FILENAME.base64 FILENAME.verify

如果我想添加中间证书,证书的顺序是什么?

添加证书的顺序如下:

  1. -----BEGIN CERTIFICATE-----
  2. %您的证书%
  3. -----END CERTIFICATE-----
  4. -----BEGIN CERTIFICATE-----
  5. %您的中间证书%
  6. -----END CERTIFICATE-----

如何验证我的证书链?

您可以使用 openssl 二进制文件来验证证书链。如果命令的输出(请参见下面的命令示例)以Verify return code: 0 (ok),则您的证书链有效。ca.pem文件必须与您添加到rancher/rancher容器中的文件相同。使用由公认的证书颁发机构签名的证书时,可以省略-CAfile参数。

命令:

  1. openssl s_client -CAfile ca.pem -connect rancher.yourdomain.com:443
  2. ...
  3. Verify return code: 0 (ok)