【k8s系列十四】nginx-ingress SSL会话卸载层

646 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

SSL会话卸载层

实现会话卸载成功的结果是:从外部访问ingress接口需要使用https请求,而nginx转发的时候采用的是http请求。这就是卸载层。

第一步:创建证书

创建证书,要先生成私钥,再生成证书请求,在去签发,现在我们可以在新版本中一步生成。

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

image

生成了公钥和私钥

线上环境需要购买证书哈。

第二步:使用证书

如果想在ingress里使用证书,我们没有稳定的放啊提供给ingress,我们只能先把它保存为ingress的对象,或者是集群内部的对象,然后把这个对象给到ingress去调用

在ingress-https文件夹下执行命令:

kubectl create secret tls tls-secret --key tls.key --cert tls.crt
  • secret: 创建对象的名字叫secret
  • tls: 是秘钥的类型
  • tls-secret:当前证书的名字
  • --key tls.key: 指定证书的私钥
  • --cert tls.crt: 指定证书的公钥

这个命令的含义是: 将名字tls-secret的证书的公钥和私钥都保存到一个叫secret的对象里了. 后面ingress调用了对象, 就等同于调用了证书.

第三步: 准备ingress资源清单

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-https
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
    - hosts:
      - www.lxl.com
      secretName: tls-secret
  rules:
    - host: www.lxl.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: nginx-svc
              port: 
                number: 80
  • 指定了ingress的名字nginx-test

  • tls: 指定和秘钥相关的内容

    • 指定了当前的主机是www.lxl.com
    • 指定当前的证书: tls-secret, 这时sercet证书的名字
  • rules:规则

    • host:主机名, 和秘钥的hosts保持一致
    • http代表使用的是http协议. 这里后端使用的是http一些,前端使用的是https.
    • backend: 指定后端的svc的名字和端口

第四步:运行脚本

kubectl apply -f ingress-https.yaml

第五步:当前运行的原理

到现在为止, 我们及群里已经创建了3个ingress了。

  • 第一个:www1.hongfu.com
  • 第二个:www2.hongfu.com
  • 第三个:www.lxl.com

下面使他们的关系

image

三个ingress文件的对应关系是

  • 第一个:www1.hongfu.com 对应的svc是nginx-svc
  • 第二个:www2.hongfu.com 对应的svc是nginx-svc-v2
  • 第三个:www.lxl.com 对应的svc是nginx-svc

第六步:配置hosts

image

第七步:在浏览器访问

https://www.lxl.com:32110/hostname.html

image

配置成功。使用的是https。