写点什么

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:40947

评论

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

SQL抽象语法树及改写场景应用

京东科技开发者

sql SQL优化 场景应用 SQL语言 抽象语法树

软件测试 | 测试开发 | Java or Python?测试开发工程师如何选择合适的编程语言?

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

测试

你好,广州!openGauss广州用户组招募计划正式开启

具有资质的昆明等保测评公司新名单看这里!

行云管家

等保 堡垒机 等级保护

《编程的原则》读书笔记(二): 编程理论的三个思想和六个实现原则

Chares

软件工程 软件开发 编程原理 软件开发原则

C语言中的内存模型

C++后台开发

内存模型 C语言 C/C++ linux开发 C++开发

如何从InfluxDB/OpenTSDB无缝连接到TDengine

TDengine

数据库 tdengine 开源 时序数据库

网络安全漏洞分析之远程代码执行

网络安全学海

黑客 网络安全 信息安全 渗透测试 漏洞挖掘

GitLab + Jenkins + Harbor 工具链快速落地指南

胡说云原生

DevOps gitlab cicd Harbor jenkins

ESP32-C3 应用程序的启动流程

矜辰所致

ESP32-C3 10月月更 ESP-IDF

创新公司iLabService 释普科技启示录

B Impact

旺链科技入选2022“科创中国”创新成果名单

旺链科技

区块链 金融科技 产业区块链

大数据ELK(十九):使用FileBeat采集Kafka日志到Elasticsearch

Lansonli

Filebeat 10月月更

如何优雅地编写一个高逼格的JS插件?

茶无味的一天

JavaScript 前端 js JS插件

易操作、可观测、可扩展,EMQX如何简化物联网应用开发

EMQ映云科技

运维 物联网 IoT emqx 10月月更

Flowable 中 ReceiveTask 怎么玩?

江南一点雨

Java springboot workflow flowable JavaEE

Zebec即将推出公链并开放节点申请,潜力几何?

西柚子

智能合约系统开发Web3.0实现核心

薇電13242772558

智能合约

32天高效突击:狂刷《Java权威面试指南(阿里版)》,offer拿到手软!

Geek_0c76c3

Java 数据库 开源 程序员 开发

独家巨献!阿里技术专家兼Github贡献者,整理的Spring Security入门到成神

Geek_0c76c3

Java 数据库 开源 程序员 开发

Vue网站自动提交百度链接

源字节1号

软件开发 后端开发 Vue网站

如何低成本实现客户服务自动化?

Baklib

如何快速打造BI大屏进行数据赋能

力软低代码开发平台

【荣耀帐号服务FAQ】AuthorizationCode有效期是多久?

荣耀开发者服务平台

手机 服务 安卓 荣耀 honor

实时云渲染的关键技术是什么?

Finovy Cloud

人工智能 云渲染 实时渲染

干货|仅需3步完成酷炫数据可视化大屏制作!

云智慧AIOps社区

大前端 低代码 数据可视化 智慧大屏可视化 可视化大屏

软件测试 | 测试开发 | Google 测试总监聊如何经营成功的测试职业生涯

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

测试

【一Go到底】第九天---进制

指剑

Go golang 10月月更

DAG 任务调度与 go-streams 结合的应用实践

KaiwuDB

两将军问题和TCP三次握手

有态度的马甲

TCP协议 两将军问题

【iOS逆向】某运营商签名算法分析

小陈

逆向思维 逆向 iOS逆向 逆向分析

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