1.已有域名新建二级域名
以腾讯云为例,在腾讯云控制台,进入云解析DNS,在这里选择"添加记录"。接着,在"主机记录"处填写二级域名名称,比如"xxx.wanna1314y.top"的二级域名就是xxx,在记录值处,填写服务器的IP地址,点确认提交记录,二级域名。
2.为二级域名申请SSL证书
比如域名wanna1314y.top,我们拥有xxx.wanna1314y.top二级域名之后,SSL证书不能和原来的一级域名wanna1314y.top共用,需要重新申请SSL证书。
在腾讯云的DNS解析处,进入SSL的相关配置。
最终进入到下面这样的页面,选择"我的证书"-"申请免费证书"。
接着,进入到下面这样的页面,填写刚刚新增的二级域名的相关信息。
提交表单之后,就到了腾讯云的审核阶段。等一会儿,审核就会通过,我们新申请的SSL证书就会生效。
进入到SSL首页,我们找到我们申请的二级域名的证书信息,点击下载,就会进入到下面这个页面,需要选择对应的服务器类型进行下载。
我这里使用Nginx进行部署证书,我们选择Nginx并下载,最终会得到如下的几个文件。
也就是下面这样的4个文件,其中Nginx部署SSL主要需要用到halo.wanna1314y.top_bundle.crt
文件和halo.wanna1314y.top.key
这两个文件,halo.wanna1314y.top_bundle.crt
文件是证书文件,halo.wanna1314y.top.key
则是RSA私钥文件。
halo.wanna1314y.top.csr
halo.wanna1314y.top_bundle.crt
halo.wanna1314y.top.key
halo.wanna1314y.top_bundle.pem
3. 在Nginx当中配置SSL证书
我们需要将上一步当中生成的相关文件上传到服务器,使用命令sudo vim /etc/nginx/sites-available/default
去编辑Nginx的配置文件,并修改(或者新增)如下这样的一个server区。
server {
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
client_max_body_size 1024m;
ssl_certificate /path/to/halo.wanna1314y.top_bundle.crt;
# 私钥文件的相对路径或绝对路径
ssl_certificate_key /path/to/halo.wanna1314y.top.key;
ssl_session_timeout 5m;
# 配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 协议配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name wanna1314y.top;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
新增如下这些部分,并将/path/to/halo.wanna1314y.top_bundle.crt
去修改为自己服务器的文件证书路径,将/path/to/halo.wanna1314y.top.key
去修改成为自己服务器的密钥路径。
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
ssl_certificate /path/to/halo.wanna1314y.top_bundle.crt;
# 私钥文件的相对路径或绝对路径
ssl_certificate_key /path/to/halo.wanna1314y.top.key;
ssl_session_timeout 5m;
# 配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 协议配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
重启Nginx服务,让刚刚新修改的配置可以及时生效。
sudo systemctl restart nginx
4.在K8S当中使用Ingress-Nginx去部署SSL证书
4.1 创建SSL证书的Secret
创建密钥之前,我们需要使用FTP,将证书文件上传到K8S集群master节点。
接着,我们使用kubectl
基于命令去创建一个Secret,名叫 halo-wanna1314y-top-ssl
给Ingress的配置使用,并指定SSL的证书和密钥。
kubectl create secret tls app-tls-secret --cert=/path/to/halo.wanna1314y.top_bundle.crt --key=/path/to/halo.wanna1314y.top.key
需要注意的是,我们这里创建Secret使用的是kubectl create secret tls
命令,不仅指定Secret并且还指定Secret的类型为TLS(SSL证书),因为Secret存在有多种类型。
4.2 创建Ingress资源并指定SSL的Secret
创建如下的ingress.yaml
作为创建Ingress的资源清单,并指定halo-wanna1314y-top-ssl
的Secret作为SSL的密钥配置信息。
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: wanna-project-nginx-ingress
namespace: wanna-project
annotations:
nginx.ingress.kubernetes.io/affinity: cookie
nginx.ingress.kubernetes.io/proxy-body-size: 100m
nginx.ingress.kubernetes.io/session-cookie-max-age: '86400'
nginx.ingress.kubernetes.io/session-cookie-name: SESSION
spec:
ingressClassName: nginx
tls:
- hosts:
- halo.wanna1314y.top
secretName: halo-wanna1314y-top-ssl
rules:
- host: halo.wanna1314y.top
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: halo-service
port:
number: 8090
使用kubectl apply -f ingress.yaml
让我们配置的Ingress配置生效。
涉及到SSL相关的配置信息如下,我们指定halo.wanna1314y.top
域名使用的证书所在的配置Secret名称为 halo-wanna1314y-top-ssl
。
tls:
- hosts:
- halo.wanna1314y.top
secretName: halo-wanna1314y-top-ssl