Azure APIM自建网关如何处理自签名证书不被信任问题?
摘要:问题描述 在先前的四篇博文 1:【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案二) 2:【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案一) 3:【Azure APIM】
问题描述
在先前的四篇博文
1:【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案二)
2:【Azure APIM】APIM的自建网关如何解决自签名证书的受信任问题呢?(方案一)
3:【Azure APIM】如何解决后端API服务配置自签名证书时APIM请求报错500:Error occured while calling backend service
4:【Azure 环境】在Windows环境中使用OpenSSL生成自签名证书链步骤分享
我们分别介绍了使用OpenSSL生成自签名证书,然后解决APIM服务对自签名证书的信任问题。不论是APIM托管的网关,还是自建的网关都可以通过安装证书后使得请求受信任,通过配置API跳过证书验证环节。
本文这从“自建网关本身AKS POD” 方面入手,通过配置 SSL_CERT_FILE 环境变量,来安装自签名证书 (根证书和中间证书)到POD中。
经过AI大模型解答,在AKS (Azure Kubernetes Service) 中访问使用自签名证书的 API,关键在于让客户端信任该证书,主要的思路是:
创建包含 CA 证书的 Secret
将自签名的 CA 证书文件 (例如 ca.crt) 导入到 AKS 集群
在应用部署的 YAML 文件中,将该 Secret 挂载到容器内,并设置 SSL_CERT_FILE 环境变量指向该证书
操作步骤
第一步:准备好中间证书和根证书合并一起的 .crt 内容
导出方法:通过浏览器导出中间证书+根证书的 crt 文件,其内容是 Base64 编码
第二步:创建Kubernetes Secret
将自签名的 CA 证书文件 (例如 my-inetr-ca.crt) 导入到 AKS 集群中:
命令:
kubectl create secret generic self-signed-ca --from-file="<the full path of my-inetr-ca.crt>"
结果:
第三步:在APIM的自建网关Pod中挂载证书
在应用部署的 YAML 文件中,将该 Secret 挂载到容器内,并设置 SSL_CERT_FILE 环境变量指向该证书
...
volumeMounts:
- name: ca-volume
mountPath: /etc/ssl/certs/my-ca.crt
subPath: my-inetr-ca.crt
env:
- name: SSL_CERT_FILE
value: /etc/ssl/certs/my-ca.crt
...
volumes:
- name: ca-volume
secret:
secretName: self-signed-ca
...
把从APIM获取的部署yaml内容,只修改如图中的三个位置,即可。
第四步:部署以上配置,后访问AKS Service External URL进行测试验证
# 部署
kubectl apply -f "<apim self-hosted gateway yaml file>"
#获取对外暴露的IP地址
kubectl get services
##测试访问自建网关中的API
curl https://<external ip>/api -k
测试结果,成功通过证书验证及获取正确的结果:
如果没有配置SSL_CERT_FILE 及挂载证书,就会遇见500Internal server error。
