Ingress官网关于TLS/Https说明

生产环境对外的服务一般需要配置HTTPS协议,使用Ingress也可以非常方便地添加HTTPS的证书。下面进行添加HTTPS证书演示:

1.使用Openssl生成一个证书

[root@k8s-master01 ~]# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginx.test.com"

上面参数说明:

  • openssl: OpenSSL是一个开源的加密工具库,用于进行加密、解密和生成证书等操作
  • req: 命令选项,用于执行证书请求相关的操作
  • -x509: 命令选项,表示生成自签名的X.509证书,而不是创建证书签署请求(CSR)
  • -nodes: 命令选项,表示在生成私钥时不加密密钥。这样生成的私钥文件不会有密码保护,这在Nginx中使用TLS证书时很常见,因为Nginx需要使用未加密的私钥
  • -days 365: 命令选项,设置证书的有效期为365天,即一年
  • -newkey rsa:2048: 命令选项,表示同时生成一个新的RSA 2048位的私钥
  • -keyout tls.key: 命令选项,指定生成的私钥保存在名为tls.key的文件中
  • -out tls.crt: 命令选项,指定生成的自签名证书保存在名为tls.crt的文件中
  • -subj "/CN=nginx.test.com": 命令选项,设置证书的主题(Subject),其中包含了证书的通用名称(Common Name,简称CN)。这里将通用名称设置为nginx.test.com,这意味着该证书将用于nginx.test.com域名

生成tls.crt和tls.key文件

[root@k8s-master01 ~]#  ls
tls.crt  tls.key

2.创建tls类型的secret

[root@k8s-master01 ~]# kubectl create secret tls ca-secret --cert=tls.crt --key=tls.key -n study-ingress

[root@k8s-master01 ~]# kubectl get secret -n study-ingress
NAME                  TYPE                                  DATA   AGE
ca-secret             kubernetes.io/tls                     2      6s
default-token-5r4cf   kubernetes.io/service-account-token   3      3h47m

3.配置 Ingress 添加 TLS 配置

[root@k8s-master01 ~]# vim ingress-ssl.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  creationTimestamp: null
  name: nginx-ingress
  namespace: study-ingress
  # annotations:
   # kubernetes.io/ingress.class: nginx
spec:
  ingressClassName: nginx # for k8s >= 1.22+
  rules:
  - host: nginx.test.com
    http:
      paths:
      - backend:
          service:
            name: nginx
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - nginx.test.com
    secretName: ca-secret

上面参数说明:

  • hosts:证书所授权的域名列表
  • secretName:证书的Secret名字

说明:1.22+版本的k8s需要配置ingressClassName

4.更新该Ingress

[root@k8s-master01 ~]# kubectl apply -f ingress-ssl.yaml

5.使用curl进行测试,域名已经被重定向到 https

[root@k8s-master01 ~]# curl -H "Host:nginx.test.com" 192.168.1.35 -I
HTTP/1.1 308 Permanent Redirect
Date: Sun, 30 Jul 2023 12:46:45 GMT
Content-Type: text/html
Content-Length: 164
Connection: keep-alive
Location: https://nginx.test.com

打开浏览器,输入nginx.test.com查看到被重定向到 https://nginx.test.com

Ingress Nginx SSL