作者:gc(at)sysin.org,主页:www.sysin.org
4. Kubernetes NGINX Ingress Controller
本例部署的 ingress-nginx 版本为 0.30.0,经过测试只要使用受信任证书,即可获得 A+ 得分。
默认支持 HSTS,仅使用 TLS v1.2,Cipher 使用如下:
Cipher Suites
# TLS 1.2 (suites in server-preferred order)
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) ECDH x25519 (eq. 3072 bits RSA) FS 128
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030) ECDH x25519 (eq. 3072 bits RSA) FS 256
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 (0xcca8) ECDH x25519 (eq. 3072 bits RSA) FS 256
以下发布 Dashboard 为例,配置受信任 SSL 证书
查看 Dashboard 已经正常部署
kubectl get po,svc -n kubernetes-dashboard -o wide
部署受信任的 SSL 证书
# 创建 secret,在 ingress 不能直接使用证书需要转换为 secret 才能使用
kubectl create secret tls dashboard-ingress-tls --key dashboard-ingress.key --cert dashboard-ingress.crt -n kubernetes-dashboard
# 如果是用受信任的 ssl 证书,直接下载 .key 和 .crt 文件替换执行上述命令即可。
# 因为自签名证书访问存在浏览器兼容性问题,本例使用阿里云受信任 SSL 证书。
# 经过测试 pem 和 crt 格式相同,都是 PEM 格式,下载 pem 格式的改名 crt 即可。
# 查看 secret 内容
kubectl get secret dashboard-ingress-tls -n kubernetes-dashboard -o yaml
# 删除命令:
kubectl delete secret dashboard-ingress-tls -n kubernetes-dashboard
配置 ingress 转发文件
# vi dashboard-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
name: kubernetes-dashboard-ingress
namespace: kubernetes-dashboard #注意修改
spec:
tls:
- hosts:
- k8s.sysin.cn
secretName: dashboard-ingress-tls #上述创建的secret
rules:
- host: k8s.sysin.cn
http:
paths:
- path: /
backend:
serviceName: kubernetes-dashboard
servicePort: 443
host: 对应的域名
path: url上下文
backend: 后向转发到对应的 serviceName: 和 servicePort:
注意,dashboard 默认使用 https 提供服务,这里发布成功的关键是要添加 annotations 参数
annotations:
nginx.ingress.kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
部署:
kubectl apply -f dashboard-ingress.yaml
部署成功后可以通过域名访问:https://k8s.sysin.cn