通过自定义域名访问集群
操作场景
主题备用名称(Subject Alternative Name,缩写SAN)允许将多种值(包括IP地址、域名等)与证书关联。SAN通常在TLS握手阶段被用于客户端校验服务端的合法性:服务端证书是否被客户端信任的CA所签发,且证书中的SAN是否与客户端实际访问的IP地址或DNS域名匹配。
当客户端无法直接访问集群内网私有IP地址或者公网弹性IP地址时,您可以将客户端可直接访问的IP地址或者DNS域名通过SAN的方式签入集群服务端证书,以支持客户端开启双向认证,提高安全性。典型场景例如DNAT访问、域名访问等特殊场景。
如果您有特殊的代理访问或跨域访问需求,可以通过自定义SAN实现。域名访问场景的典型使用方式如下:
- 客户端配置Host域名指定DNS域名地址,或者客户端主机配置/etc/hosts,添加响应域名映射。
- 云上内网使用,云解析服务DNS支持配置集群弹性IP与自定义域名的映射关系。后续更新弹性IP可以继续使用双向认证+自定义域名访问集群,无需重新下载kubeconfig.json配置文件。
- 自建DNS服务器,自行添加A记录。
前提条件
已创建一个v1.19及以上版本的集群。
添加自定义SAN
- 登录CCE控制台。
- 在集群列表中单击集群名称,进入集群总览页。
- 在连接信息的自定义SAN处单击,在弹出的窗口中添加IP地址或域名,然后单击“保存”。
1. 当前操作将会短暂重启kube-apiserver并更新kubeconfig.json文件,请避免在此期间操作集群。
2. 请输入域名或IP,以英文逗号(,)分隔,最多128个。
3. 自定义域名如需绑定弹性公网,请确保已配置公网地址。
使用SAN连接集群
通过kubectl连接集群
- 修改SAN后,需重新下载kubeconfig.json配置文件。
- 配置kubectl。
- 登录到您的客户端机器,复制1.b中下载的配置文件(kubeconfig.json)到您客户端机器的/home目录下。
- 配置kubectl认证文件。
cd /home mkdir -p $HOME/.kube mv -f kubeconfig.json $HOME/.kube/config
- 切换kubectl的访问模式,使用SAN连接集群。
kubectl config use-context customSAN-0
其中customSAN-0为自定义SAN对应的配置名称。如同时设置了多个SAN,每个SAN对应配置名称中的数字从0开始依次增大,例如customSAN-0、customSAN-1,以此类推。
通过X509证书连接集群
- 修改SAN后,需重新下载X509证书。
- 登录CCE控制台,单击集群名称进入集群。
- 查看集群总览页,在右边“连接信息”下证书认证一栏,单击“下载”。
- 在弹出的“证书获取”窗口中,根据系统提示选择证书的过期时间并下载集群X509证书。
- 使用集群证书调用Kubernetes原生API。
例如使用curl命令调用接口查看Pod信息,如下所示,其中example.com:5443为自定义SAN。
curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://example.com:5443/api/v1/namespaces/default/pods/
更多集群接口请参见Kubernetes API。