全文提到的“域名”一词指的是用到的完整域名而不是顶级域名的意思,比如:你用到啊a.b.com,接下来所有的地方就是 a.b.com 而不是 b.com 以下阅读时注意,否则必掉坑;如果你用到就是 b.com 那就是 b.com 也不需要添油加醋~
开始教程(域名:api.app.com 为例)
1、检查将要配置的域名查看状态
- 检测地址:SSL状态检测
- Ps:因为还没配置到 K8S Ingress 上,所以肯定是不合规,等全部配置完成后,我们可以再回头验证
2、下载 HTTPS SSL 域名证书加密文件
在阿里云、腾讯云或者其他云上,直接下载即可(当然自己会生成也可以),我这边以腾讯云为例,如图所示,建议下载 Nginx 版本
这里有一个巨坑,就是我开头特别提醒的,就是在申请 SSL 证书的时候,需要填写域名,很多人以为填写顶级域名即可(除非业务是用到顶级域名) ,这里的原则是需要用到啥域名就填写完整的域名,除非有钱人直接购买泛域名证书,那我们另当别论,一般免费的只支持单域名噢~
- 因为我们用的是免费证书,所以这里填写的是“api.app.com”,而不是“app.com”
3、制作应用的 Secret
apiVersion: v1
kind: Secret
data:
tls.crt: base64 encoded cert
tls.key: base64 encoded key
metadata:
name: app-ssl-secret
namespace: default
type: kubernetes.io/tls
- 照抄即可,关键是要记住这里的 app-ssl-secret 这个名字,等下应用的 Ingress 需要用到
4、将 Secret 文件和 SSL 证书文件合体
假设第 3 步的 Secret 文件叫“app-ssl-secret.yaml”,将这个文件放到 SSL 证书文件夹里面,为的是和证书里的文件在同目录下,便于 kubectl 生成应用 secret。执行成功后再配置应用 Ingress 即可
kubectl create secret tls app-ssl-secret --cert=api.app.com_bundle.crt --key=api.app.com.key
5、配置 Ingress
注意:配置的是应用级的 Ingress,而不是 Ingress-Controller 噢~
如果已经配置过应用 Ingress,只需要关注 tls 配置即可,否则整个拿来把你!secretName 就是刚刚说的名字,注意 tls 里面的缩进,否则配置可能不生效,最恶心的时也不报错,所以配置好后,最好回头看一下刚刚配置的是否还在,否则会消失掉,掉坑过
还有一个坑是新版本 Ingress yaml 文件格式,我以为 secretName 正确写法是 secret:name: xxx(因为在 rules 里的 serviceName 掉坑过,DDDD),没想到它这里还是旧版本写法——secretName: xxx
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-szqy
namespace: default
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
tls: # config SSL, if needn't remove it
- hosts:
- api.app.com
secretName: app-ssl-secret
rules:
- host: api.app.com # 外部可以访问的域名
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-server # app service name
port:
number: 38080 # app service port
# 如果没配置过的话,需要执行
kubectl create -f nginx-ingress-controller-app-service.yaml
6、校验
最后,我们在通过刚开始的检测地址校验下,突然间发现……成功了~
- Ps:当然还有一种简单粗暴验证方案,就是通过 https 在浏览器里访问,如果是合规的就会出现一把安全锁,否则会提示不安全