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

引 言

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

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

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

Rancher在任何地方均可以使用TLS。所以,在安装Rancher以前,肯定TLS终止选项十分重要。docker

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

  • 自签名,由Rancher终止(这是默认的)
  • Let’s Encrypt,由Rancher终止
  • 自带证书,由Rancher终止
  • 外部TLS终止

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

三、 确保你知道Rancher要使用的主机名。这在安装以后不可更改。服务器

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

https://docs.rancher.cn/网络

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

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

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

除了HTTPS安全以外,还有其余两个地方也十分须要TLS:

一、 kubectl

二、 节点和集群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链接的集群(包括导入的或其余方式)中,须要部署两个工做负载:

一、cattle-cluster-agentDeployment

二、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的自签名证书

在终止TLS的四个选项中,这个多是最简单的。在HA和单节点安装方案中,这也是Rancher的默认选项。也就是说,经过不将任何TLS特定的参数传递给helm installdocker 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/ranc...

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

--set hostname=<YOUR.DNS.NAME>

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

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

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

相关文章
相关标签/搜索