写点什么

TLS 使用指南(一):如何在 Rancher 2.x 中进行 TLS 终止?

  • 2020-05-25
  • 本文字数:2760 字

    阅读完需:约 9 分钟

TLS使用指南(一):如何在Rancher 2.x中进行TLS终止?

引言

这是一个系列文章,我们将在本系列中探索 Rancher 使用 TLS 证书的不同方式。TLS,安全传输层协议,是用于保护网络通信的加密协议。它是目前已经弃用的安全套接层(SSL)的继任者。


你可以从本系列中了解 TLS 如何集成到各种 Rancher 组件中以及如何准备环境以正确利用 Rancher 中的 TLS。

为什么安全传输层协议(TLS)很重要?

Rancher 在任何地方都可以使用 TLS。因此,在安装 Rancher 之前,确定 TLS 终止选项十分重要。


1、 确认你想要执行的 TLS 终止类型,有以下几种类型:


  • 自签名,由 Rancher 终止(这是默认的)

  • Let’s Encrypt,由 Rancher 终止

  • 自带证书,由 Rancher 终止

  • 外部 TLS 终止


2、 如果你选择了自带证书或外部 TLS 终止,那么请确保你有用于注册证书的 CA 证书的副本(仅需 cert,不需要密钥)。Rancher 在执行操作时需要这一文件。


3、 确保你知道 Rancher 要使用的主机名。这在安装之后不可更改。


建议你通过阅读文档来了解更多的细节:


https://docs.rancher.cn/

什么组件需要安全传输层协议

对于任何企业软件来说,你都需要在安装和使用之前确定特定的要求,包括存储要求、网络、在云端还是本地等等。在进行安装之前,你必须得明确回答这些问题。


对于 Rancher 来说,考虑因素之一是 TLS。必须了解并计划使用 Rancher 进行 TLS 的方法,如此才能获得能够充分支持并且拥有良好功能的解决方案。


除了 HTTPS 安全之外,还有其他两个地方也十分需要 TLS:


1、 kubectl


2、 节点和集群 agent 通信


注意,并不止以上两个地方会使用到 TLS,只是上述两个地方更为常见。

理解 kubectl TLS

首先,我们来看一下示例 kubeconfig 文件:


apiVersion: v1kind: Configclusters:- name: "sample"  cluster:    server: "https://rancher.example.org/k8s/clusters/c-1234"    certificate-authority-data: "LS0t..."
复制代码


特别注意 certificate-authority-data 的存在。该字段是 CA 证书的 base64 编码版本,这一 CA 证书可用于对 Kubernetes API 服务器提供的 TLS 证书进行签名。或者是 Rancher 在代理调用 kube-apiserver 时提供的 TLS 证书。


为什么这个如此重要呢?因为 kubectl 使用 certificate-authority-data 来确保是你(而不是冒名顶替者)正在连接到正确的集群。如果服务器提供的证书尚未由 certificate-authority-data 中的证书签名,那么 kubectl 会警告你并且退出。基本上,你不会遭受 MITM(中间人)攻击。


certificate-authority-data 中的值来自 kube-ca 的 CA 证书(非 Rancher 集群或使用授权集群端点的 Rancher 集群),或者是 Rancher CA 证书(任意 Rancher 集群)。


请务必在此字段中输入正确的值,否则 kubectl 不会验证与你的 Kubernetes 集群的连接。这就是为什么在设置 Rancher 时需要正确配置 TLS。

理解节点和集群 Agent 通信

在任意 Rancher 连接的集群(包括导入的或其他方式)中,需要部署两个工作负载:


1、 cattle-cluster-agent Deployment


2、 cattle-node-agent Deployment


每个工作负载执行一个特定的功能。总之,这两个 agent 连接到 Rancher 的 API 并在 tcp/443 上建立安全的 websocket 连接。然后,该 websocket 连接会用于 Rancher 与托管的节点或集群之间的双向通信。


集群 agent 连接到托管集群的 Kubernetes API,这使 Rancher 可以通过 websocket 隧道执行 API 操作。当执行集群操作时(如升级、ectd 快照等),节点 agent 将与 RKE 集群中的节点进行交互。


这两个 agent 都使用称为“CA checksum”的配置值,该配置值将作为环境变量以 CATTLE_CA_CHECKSUM 的形式传递给 Pod。该值需要与 kubectl 相同——确保连接到正确的端点并方式 MITM 的发生。但是,校验和的工作原理略有不同。


cattle agent 的 CA checksum 可以厌憎 agent 是否连接到 Rancher API 的正确实例。由于 Rancher 使用 TLS 保护其 HTTPS API 端点,因此 agent 容器可以使用此校验和来验证 API 端点提供的 TLS 证书是否正确。


其次,CATTLE_CA_CHECKSUM 未配置为 CA 证书的 base64 编码副本。相反,Rancher 会生成 CA 证书的 sha256 校验和,该证书用于签署 Rancher TLS 证书,并将该值放入 CATTLE_CA_CHECKSUM 字段中。结果如下:


CATTLE_CA_CHECKSUM=b0af09b35ef086fcfc21e990fbd750720abe5c811dbea3ae40fe050a67f0bdb0e
复制代码


当一个 Rancher 集群或节点 agent 调用 Rancher API,它会将 CA 证书与其在 Deployment 和 DaemonSet 中配置的那一个进行比较。如果它们匹配,通信则会建立起来。

安全传输层协议(TLS)终止

当安装 Rancher 时有以下 4 种主要方式来终止 TLS:


  • 使用 Rancher 的自签名证书

  • 使用 Let’s Encrypt

  • 自带证书

  • 外部 TLS 终止


每种方法都有特定的要求,需要在具体操作中进行权衡。

使用 Rancher 的自签名证书

在终止 TLS 的四个选项中,这个可能是最简单的。在 HA 和单节点安装方案中,这也是 Rancher 的默认选项。也就是说,通过不将任何 TLS 特定的参数传递给 helm 安装或 docker run,来进行安装。


安装后,Rancher 会生成一个 CA 证书(CN=cattle-ca),并且使用该证书为其自身证书签名。根据你执行的安装类型,自签名证书的工作方式会有所不同。

单节点安装

容器启动后,设置前,Rancher 在 443 端口上响应任意 HTTPS 请求,无论其目标 Host 值如何。这是如何成为可能的呢?


在这一状态下,Rancher 会为你到达的任何主机名自动生成一个证书。如果是一个 IP(如 10.11.12.13),那么 Rancher 会为该 IP 生成一个自签名(使用 cattle-ca)证书。如果是以一个主机名(如 my-rancher.example.org)到达此新的 Rancher 安装目录,同样也会以相同的方式生成一个自签名证书。


在 Rancher 使用单个证书之前,你需要完成设置步骤(设置管理员密码并确认 Rancher 主机名)。该证书对于在 Rancher 初始设置期间配置的主机名有效。

HA 安装

在 HA 安装场景下,自签名证书需要你安装一个名为 cert-manager 的应用程序。与单节点 Rancher 管理 CA 证书本身不同,HA rancher 使用 cert-manager 来处理证书的生命周期。你可以根据以下指引将 cert-manager 安装到你准备好的 Kubernetes 集群中:


https://rancher.com/docs/rancher/v2.x/en/installation/k8s-install/helm-rancher/


一旦你完成 cert-manager 的安装,下一步是安装 rancher。使用自签名证书是 Rancher 的默认设置,所以执行 helm install 时实际上只有一个强制性参数:


--set hostname=<YOUR.DNS.NAME>
复制代码


该参数是强制性的,因为 Rancher HA 安装不具有与单节点安装相同的即时证书生成功能。因此,一旦你设置了主机名,该主机名将用于 Rancher 安装的整个生命周期。所以你必须确保你的设置是正确的。


然后 cert-manager 将会生成一个证书,该证书作为一个 secret 存储在 cattle-system 命名空间中,名为 tls-rancher-ingress。


本文就到此结束啦,本系列的第二篇文章将会为大家介绍其他类型的 TLS 终止选项。


2020-05-25 16:40965

评论

发布
暂无评论
发现更多内容

京东零售实践干货|简单一招竟把nginx服务器性能提升50倍

京东零售技术

nginx 后端

极狐GitLab 16.8 如期而至,快来看看有哪些功能更新!

极狐GitLab

深入了解低代码开发:多角度分类

天津汇柏科技有限公司

低代码 低代码开发 低代码开发平台 定制软件开发 软件开发定制

iOS应用崩溃了,如何通过崩溃手机连接电脑查找日志方法

API安全概览

FunTester

简单一招竟把nginx服务器性能提升50倍

京东科技开发者

教你一键搭建本地服务器,轻松4人以上联机畅玩幻兽帕鲁

华为云开发者联盟

云计算 服务器 华为云 华为云开发者联盟

产品价值 vs Bug数量

Bruce Talk

敏捷 敏捷开发 Agile Product Owner

Python笔记四之协程

Hunter熊

Python 协程

Wireshark的捕获接口设置

小齐写代码

【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)

码界西柚

分布式 Netty RPC 网络通讯 2024年第二十五篇文章

测试管理|名企测试管理大咖解析沟通管理,多维度经验分享

霍格沃兹测试开发学社

名企测试管理大咖解析沟通管理,多维度经验分享

测试人

软件测试

名企测试管理大咖解析沟通管理,多维度经验分享

测吧(北京)科技有限公司

测试

Tonka Finance 测试网活动,开启新铭文时代财富之门

股市老人

跨境通讯

cts喜友科技

通信 通讯

如何在JavaScript中实现主题切换

南城FE

CSS JavaScript 前端 主题切换

四步搞定国赛!快速入门大小模型融合的AI产品开发

飞桨PaddlePaddle

百度 产品开发 大模型 飞桨国赛 飞桨星河社区

给你一颗“定心丸”——记一次由线上事故引发的Log4j2日志异步打印优化分析

京东科技开发者

ScaleFlux与UCloud携手,助力高性能文件存储,实现低成本和高性能的完美平衡

ScaleFlux

高性能 数据压缩 企业存储

面试官:说一下零拷贝技术的实现原理?

王磊

java面试

软件测试|京东科技控股股份有限公司岗位开放~

霍格沃兹测试开发学社

从上海到阿根廷的网络走线方式和耗时

fliter

测试管理 | 京东科技控股股份有限公司岗位开放~

测吧(北京)科技有限公司

测试

TLS使用指南(一):如何在Rancher 2.x中进行TLS终止?_文化 & 方法_Rancher_InfoQ精选文章