【云原生学习笔记】关于集群内访问https服务的证书报错记录
项目场景:前两天在k8s集群中开发时,遇到了个问题,特意记录一下。背景如下:集群中部署了多个应用,应用B提供了https服务,从应用A内通过请求访问应用B提供的服务,不能跳过证书校验。问题描述:请求访问应用B的https服务时,集群内部之间的访问使用的是k8s提供的集群内部域名进行访问:即服务名.命名空间,设置跳过证书校验则访问成功,设置开启证书校验时就访问失败。将应用B提供的服务对外端口开始(即
项目场景:
前两天在k8s集群中开发时,遇到了个问题,特意记录一下。背景如下:
集群中部署了多个应用,应用B提供了https服务,从应用A内通过请求访问应用B提供的服务,不能跳过证书校验。
问题描述:
请求访问应用B的https服务时,集群内部之间的访问使用的是k8s提供的集群内部域名进行访问:即服务名.命名空间
,设置跳过证书校验则访问成功,设置开启证书校验时就访问失败。将应用B提供的服务对外端口开始(即NodePort模式),之后再次设置证书校验并使用IP地址进行访问,能访问成功。
访问失败时的报错大致如下:
..."https://aaa.bbb:xxx/": x509: certificate is valid for localhost, ..., not aaa.bbb
原因分析:
其实报错信息已经说明了。证书对我所使用的域名无效,仅对列出的几个有效,奈何自己对证书相关方面不太理解,知道意思也不知道如何去修改,网上查了下相似报错,都不一样。后面通过请假大佬再加上学习证书相关的知识,总算是弄明白了。
证书包含:公钥+申请者与颁发者的相关信息+签名
这里的签名就是要提供服务的网站的签名,出现该问题的原因就是当前证书没有被使用的域名进行签名,通过IP能访问也是因为证书使用本机ip进行了前面,一个证书可以绑定上多个域名。前面时还能使用通配符“*”。
解决方案:
综上,解决方法就很清楚了:重新制作证书,将使用的域名添加到 “[alt_names]
要签发的域名/ip”列表中。有篇关于使用OpenSSL生成签发多域名证书的教程可以解决该问题。
关键步骤在于:修改openssl配置文件时,增加[alt_names]模块后,要在[alt_names]模块下将使用的域名和IP填写上去。
更多推荐
所有评论(0)