最近更新时间:2023.12.18 16:28:36
首次发布时间:2023.12.18 16:28:36
为保证公网环境下的通信安全,业务使用 Ingress 暴露到公网时,通常使用 HTTPS 协议通信。本文为您介绍如何配置 HTTPS 协议的 CLB Ingress。
说明
您可以在火山引擎 SSL 证书服务 购买或使用 OpenSSL 创建 SSL 证书和密钥。本例以使用 OpenSSL 创建证书为例。
openssl genrsa -out server.key 1024 # 生成服务器端私钥 openssl rsa -in server.key -pubout -out server.pem # 生成服务器端公钥
openssl genrsa -out ca.key 1024 openssl req -new -key ca.key -out ca.csr openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
#服务器端需要向 CA 机构申请签名证书,在申请签名证书之前依然是创建自己的 CSR 文件 openssl req -new -key server.key -out server.csr #向 CA 机构申请证书,签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书 openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt openssl x509 -in server.crt -out server.cer -outform der
获得 HTTPS 证书后,需要通过负载均衡控制台,将证书和密钥上传。
clb-secret.yaml
代码如下:apiVersion: v1 kind: Secret metadata: name: demo-https-secret # 保密字典名称 namespace: default # 保密字典的命名空间 labels: lb.type: clb # 使用标签标记证书的属性,键为 lb.type,值为 clb,表示该证书是 CLB 证书 type: Opaque # 保密字典的类型,本例为 Opaque data: cert_id: Y2VydC*** # CLB 中已上传的证书 ID
kubectl apply -f clb-secret.yaml
clb-ingress.yaml
代码如下:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: annotations: ingress.vke.volcengine.com/loadbalancer-name: "clb-demo" # 配置负载均衡名称 ingress.vke.volcengine.com/loadbalancer-spec: "small_1" # 配置创建负载均衡的规格。small_1:200Mbps、small_2:500Mbps、medium_1:1000Mbps、meidum_2:2000Mbps、large_1:5000Mbps、large_2:10000Mbps ingress.vke.volcengine.com/loadbalancer-subnet-id: "subnet-rrhvmyikek1sv0x58***" # 配置负载均衡器实例所属的子网 ingress.vke.volcengine.com/loadbalancer-address-type: "public" # 配置负载均衡类型。取值: public (公网类型)、 private (私网类型) ingress.vke.volcengine.com/loadbalancer-bandwidth: "10" # 配置公网负载均衡实例的 EIP 带宽峰值,取值范围:1~500Mbps # 配置负载均衡实例所属 VPC 的子网 ID ingress.vke.volcengine.com/loadbalancer-scheduler: "wrr" # 指定调度算法。取值:wrr(加权轮询)、wlc(加权最小连接数)、sh(源地址哈希) ingress.vke.volcengine.com/loadbalancer-protocol: "https" # 指定负载均衡实例的监听协议。取值:http 、https ingress.vke.volcengine.com/loadbalancer-port: "443" # 指定负载均衡器对外的监听端口,取值范围为 1-65535。http 协议默认监听 80 端口,https 协议默认监听 443 端口 # 指定 EIP 的共享带宽包 name: clb-ingress # 自定义路由规则名称 namespace: default # 指定命名空间 spec: ingressClassName: clb # 指定 IngressClass 资源名称 rules: - host: example.com # 需要对外提供访问的域名 http: paths: - backend: service: name: service-demo # 需要对接的服务名称 port: number: 80 # 需要对接服务的端口号 path: / # 请求匹配的路径 pathType: Prefix # 路径类型:Exact(精确匹配)/Prefix(前缀匹配) tls: - host: - example.com # (可选)指定需要加密的域名。不配置表示加密所有的域名 secretName: demo-https-secret # 指定保密字典的名称
kubectl apply -f clb-ingress.yaml
kubectl get ingress
预期返回结果如下,表示 Ingress 服务创建成功,服务可以访问。
NAME CLASS HOSTS ADDRESS PORTS AGE clb-ingress clb example.com 180.xxx.xxx.xxx 80,443 74s
使用以下命令,通过域名访问服务。
curl -H "Host: example.com" https://180.xxx.xxx.xxx --insecure
注意
-k
或--insecure
参数忽略证书的验证。预期输出如下,表示可以通过域名访问到后端服务。
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>