目前我们的tomcat服务在浏览器上通过http来访问。为了提升安全性,我们将配置TLS secret 证书,从而可以进行https访问。
一对TLS密钥包括一个证书(trs.crt)和一个私钥,证书是公钥证书,用于加密数据并标识服务器,而服务器的私钥,用于解密通过公钥加密的数据,并用于签署服务器发送给客户端的数据。
当我想要配置我的ingress 资源从而支持https访问时,Ingress Controller 需要一个证书和私钥来处理 TLS 握手和加密通信。
创建TLS证书
openssl genrsa -out tls.key 2048
openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=tomcat.lucky.com
第一句话用于生成一个rsa格式的密钥,保存在tls.key文件中。
第二句话生成一个 自签名 X.509 证书,而不是生成一个证书签名请求(CSR)。X.509 是公钥证书的标准格式,广泛用于 SSL/TLS 协议中。使用 -x509
会直接生成证书,而不是请求证书颁发机构(CA)签署的证书。这个证书是配套tls.key的内容。将生成的自签名证书保存到 tls.crt
文件中。
-subj "/C=CN/ST=Beijing/L=Beijing/O=DevOps/CN=tomcat.lucky.com"用于指定密钥的主题,
C=CN
:C
表示 国家名称(Country)。在这个例子中,CN
代表中国 (China)。/ST=Beijing
:ST
表示 省/州(State or Province)。这里指定为Beijing
,表示北京市。/L=Beijing
:L
表示 城市名称(Locality)。这里同样为Beijing
。/O=DevOps
:O
表示 组织名称(Organization)。在这个例子中,DevOps
代表组织的名称。/CN=tomcat.lucky.com
:CN
表示 通用名称(Common Name)。这是最重要的字段,通常用于指定证书的域名。在这个例子中,tomcat.lucky.com
是证书所保护的域名
生成secret文件
[root@master 35ingress]# kubectl create secret tls nginx-ingress-secret --cert=tls.crt --key=tls.key
secret/nginx-ingress-secret created
您在 /var/spool/mail/root 中有新邮件
[root@master 35ingress]# kubectl get secret
NAME TYPE DATA AGE
nginx-ingress-secret kubernetes.io/tls 2 6s
[root@master 35ingress]# kubectl describe secret nginx-ingress-secret
Name: nginx-ingress-secret
Namespace: default
Labels: <none>
Annotations: <none>Type: kubernetes.io/tlsData
====
tls.crt: 1245 bytes
tls.key: 1675 bytes
创建ingress
这个ingress是有tls的ingress,用来代替之前的ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-tomcat-tlsnamespace: defaultannotations:kubernetes.io/ingress.class: "nginx"
spec:tls:- hosts:- tomcat.lucky.comsecretName: nginx-ingress-secret # 指定使用的 TLS Secretrules:- host: tomcat.lucky.comhttp:paths:- pathType: Prefixpath: /backend:service:name: tomcat # 服务名称port:number: 8080 # 服务端口
[root@master 35ingress]# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-myapp nginx tomcat.lucky.com 80 11s
ingress-tomcat-tls nginx tomcat.lucky.com 192.168.244.129 80, 443 103s
可以看到有tls的ingress还开启了443服务。
在 Kubernetes 的 Ingress 资源中,当你配置了 TLS 时,Ingress 控制器会自动为你启用 443 端口以处理 HTTPS 请求。这是因为 TLS (Transport Layer Security) 是用于加密 HTTP 请求的协议,而 HTTPS(即 HTTP over TLS)默认使用 443 端口来传输加密的流量。
可以看到用https访问域名,页面如下: