当前位置: 首页 > Linux

K8S实战(12)-为Ingress和后端Nginx添加证书

时间:2023-04-07 00:21:44 Linux

前言nginx是用http协议工作的,那么如何添加证书呢。更新历史20200701-初稿-左成礼原文地址-https://blog.zuolinux.com/2020/07/01/nginx-https.html创建证书,可以在线申请一年免费证书,或创建您自己的证书。在下面创建您自己的证书。下载自建证书脚本wget-OMakefilehttps://raw.githubusercontent.com/kubernetes/examples/master/staging/https-nginx/Makefile创建证书文件makekeysKEY=/tmp/nginx.keyCERT=/tmp/nginx.crt将证书写入K8Ssecret#kubectlcreatesecrettlsnginxsecret--key/tmp/nginx.key--cert/tmp/nginx.crtsecret/nginxsecretcreated将nginx配置写入K8Sconfigmap#catdefault.confserver{听80default_server;听[::]:80default_serveripv6only=on;听443SSL;根/usr/share/nginx/html;索引index.html;服务器名称本地主机;/tls.crt;ssl_certificate_key/etc/nginx/ssl/tls.key;位置/{try_files$uri$uri/=404;}}#kubectlcreateconfigmapnginxconfigmap--from-file=default.confconfigmap/集成完Pod和证书后创建的nginxconfigmap,使用Service发布[root@master01~]#catnginx-app.yamlapiVersion:v1kind:Servicemetadata:name:my-nginx标签:run:my-nginx规格:类型:NodePort端口:-端口:8080targetPort:80协议:TCP名称:http-端口:443协议:TCP名称:https选择器:运行:my-nginx---apiVersion:apps/v1kind:部署元数据:名称:my-nginxspec:选择器:matchLabels:run:my-nginxreplicas:1template:metadata:labels:run:my-nginxspec:volumes:-name:secret-volumesecret:secretName:nginxsecret-name:configmap-volumeconfigMap:名称:nginxconfigmap容器:-名称:nginxhttps图像:bprashanth/nginxhttps:1.0端口:-containerPort:443-containerPort:80volumeMounts:-mountPath:/etc/nginx/ssl名称:secret-volume-mountPath:/etc/nginx/conf.dname:configmap-volume[root@master01~]#kubectlapply-fnginx-app.yamlservice/my-nginxcreateddeployment.apps/my-nginxcreated查看运行情况[root@master01~]#kubectlgetservice-owideNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGESELECTORmy-nginxNodePort192.20.27.173<无>8080:32529/TCP,443:32699/TCP22srun=my-nginx[root@master01~]#kubectlgetpod-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESmy-nginx-85fccfd5dc-2pzvw1/1Running064s192.10.205.224work01尝试访问[master01~]#curl-khttps://192.20.27.173欢迎使用nginx!服务使用NodePort进行端口暴露,因此可以在浏览器中访问https://任意节点IP:32699,也可以看到证书已经生效,因为是自建证书,需要手动忽略报错。集成入口和证书#catingress.yamlapiVersion:extensions/v1beta1kind:Ingressmetadata:name:secret-tls-ingressannotations:ingress.kubernetes.io/ssl-redirect:"False"spec:tls:-hosts:-test.comsecretName:nginxsecretrules:-host:test.comhttp:paths:-backend:serviceName:my-nginxservicePort:80path:/#kubectlapply-fingress.yamlingress.extensions/secret-tls-ingress上节创建的ingress-controller已经绑定work01/02,所以将test.com绑定到集群外的work01IP进行测试。#curl-khttps://test.comWelcometonginx!可以访问成功。结论证书部分主要是将证书文件存放在K8S的secret对象中,然后进行挂载映射。这可以实现证书文件和入口的解耦。只能在ingress设置证书,后端nginx不配置证书。联系我微信公众号:zuolinux_com