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

这是一个系列文章,我们将在本系列中探索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/

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

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

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

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

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

1、 kubectl

2、 节点和集群agent通信

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

理解kubectl TLS

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

apiVersion: v1 kind: Config clusters: \- 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-agentDeployment

2、cattle-node-agentDeployment

每个工作负载执行一个特定的功能。总之,这两个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)终止(termination)

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

使用Rancher的自签名证书

使用Let’s Encrypt

自带证书

外部TLS终止

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

使用Rancher的自签名证书

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyyjzd.html