新增二级域名并新增SSL证书

1.已有域名新建二级域名 以腾讯云为例,在腾讯云控制台,进入云解析DNS,在这里选择"添加记录"。接着,在"主机记录"处填写二级域名名称,比如"xxx.wanna1314y.top"的二级域名就是xxx,在记录值处,填写服务器的IP地址,点确认提交记录,二级域名。 2.为二级域名申请SSL证书 比如

1.已有域名新建二级域名

以腾讯云为例,在腾讯云控制台,进入云解析DNS,在这里选择"添加记录"。接着,在"主机记录"处填写二级域名名称,比如"xxx.wanna1314y.top"的二级域名就是xxx,在记录值处,填写服务器的IP地址,点确认提交记录,二级域名。

95619dcd941495427cb09985dfb55959.png

2.为二级域名申请SSL证书

比如域名wanna1314y.top,我们拥有xxx.wanna1314y.top二级域名之后,SSL证书不能和原来的一级域名wanna1314y.top共用,需要重新申请SSL证书。

在腾讯云的DNS解析处,进入SSL的相关配置。

e5500926301cfb65c28cca156d27c220.png

最终进入到下面这样的页面,选择"我的证书"-"申请免费证书"。

b4a31610cec8d89f2bededfdc48935c6.png

接着,进入到下面这样的页面,填写刚刚新增的二级域名的相关信息。

f2b4a1b847db30c403a2cc1dd1b74cc0.png

提交表单之后,就到了腾讯云的审核阶段。等一会儿,审核就会通过,我们新申请的SSL证书就会生效。

5117edb58be541731f1b36bc26f845f9.png

进入到SSL首页,我们找到我们申请的二级域名的证书信息,点击下载,就会进入到下面这个页面,需要选择对应的服务器类型进行下载。

351faea34212258c0c5c5d50152c77ae-ysj4.png

我这里使用Nginx进行部署证书,我们选择Nginx并下载,最终会得到如下的几个文件。

a805bc8752fd69e4e4506de312d4526c.png

也就是下面这样的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
Comment