You need to enable JavaScript to run this app.
导航

CLB Ingress 配置 HTTPS 协议

最近更新时间2023.12.18 16:28:36

首次发布时间2023.12.18 16:28:36

为保证公网环境下的通信安全,业务使用 Ingress 暴露到公网时,通常使用 HTTPS 协议通信。本文为您介绍如何配置 HTTPS 协议的 CLB Ingress。

前提条件

操作步骤

步骤一:(可选)创建 HTTPS 证书

说明

您可以在火山引擎 SSL 证书服务 购买或使用 OpenSSL 创建 SSL 证书和密钥。本例以使用 OpenSSL 创建证书为例。

  1. 在本地环境中,访问 OpenSSL 官网,下载并安装 OpenSSL。
  2. 执行以下命令,生成公钥和私钥。
openssl genrsa -out server.key 1024 # 生成服务器端私钥
openssl rsa -in server.key -pubout -out server.pem # 生成服务器端公钥
  1. 生成 CA 证书。
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
  1. 执行以下命令,生成服务器端证书。得到 server.crtca.crtserver.key 三个文件。
#服务器端需要向 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 证书

获得 HTTPS 证书后,需要通过负载均衡控制台,将证书和密钥上传。

  1. 登录 负载均衡控制台
  2. 在左侧导航栏单击 证书管理,单击 上传服务器证书。上传公钥证书和私钥证书。
    • server.crtca.crt 文件内容,按顺序复制到 上传服务器证书 页面的 公钥证书 一栏。
    • server.key 文件的复制内容到 私钥证书 一栏。
      alt
  3. 证书添加完成后,复制已创建好的证书 ID。
    alt

步骤三:配置保密字典

  1. 创建 Secret 的 YAML 文件。示例文件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
  1. 执行以下命令,创建 Secret。
kubectl apply -f clb-secret.yaml

步骤四:配置 CLB Ingress

  1. 创建 Ingress 的 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 # 指定保密字典的名称
  1. 执行以下命令,创建 Ingress。
kubectl apply -f clb-ingress.yaml

结果验证

查看配置

  1. 执行以下命令,查看 ingress 配置。
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参数忽略证书的验证。
  • 在生产环境中使用 TLS 证书时,建议您使用官方可信证书。使用自签名证书且忽略证书验证,可能导致您受到中间人攻击。

预期输出如下,表示可以通过域名访问到后端服务。

<!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>