持续创作,加速成长!这是我参与「掘金日新计划 · 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"
生成了公钥和私钥
线上环境需要购买证书哈。
第二步:使用证书
如果想在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
下面使他们的关系
三个ingress文件的对应关系是
- 第一个:www1.hongfu.com 对应的svc是nginx-svc
- 第二个:www2.hongfu.com 对应的svc是nginx-svc-v2
- 第三个:www.lxl.com 对应的svc是nginx-svc
第六步:配置hosts
第七步:在浏览器访问
https://www.lxl.com:32110/hostname.html
配置成功。使用的是https。