为域名添加证书

ASM支持以图形化的方式为域名添加证书,便于您使用HTTPS等协议访问域名,提升服务网关的安全性。本文介绍如何为域名添加证书。

前提条件

背景信息

本文以域名为aliyun.commyexampleapp服务为例,为aliyun.com域名添加证书。添加成功后,您可以通过ASM网关使用HTTPS协议访问域名为aliyun.commyexampleapp服务。

操作步骤

  1. 创建示例服务myexampleapp。

    1. 使用以下内容,创建myexample-nginx.conf

      本示例服务基于Nginx实现,您需要为Nginx服务器创建配置文件。以域名aliyun.com的服务为例,以下内容定义请求根路径直接返回字样Welcome to aliyun.com!及状态码200

      events {
      }
      http {
        log_format main '$remote_addr - $remote_user [$time_local]  $status '
        '"$request" $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';
        access_log /var/log/nginx/access.log main;
        error_log  /var/log/nginx/error.log;
        server {
          listen 80;
          location / {
              return 200 'Welcome to aliyun.com!';
              add_header Content-Type text/plain;
          }
        }
      }
    2. 执行以下命令,创建Nginx服务器的配置项。

      kubectl create configmap myexample-nginx-configmap --from-file=nginx.conf=./myexample-nginx.conf
    3. 使用以下内容,创建myexampleapp.yaml

      展开查看myexampleapp.yaml

      apiVersion: v1
      kind: Service
      metadata:
        name: myexampleapp
        labels:
          app: myexampleapp
      spec:
        ports:
        - port: 80
          protocol: TCP
        selector:
          app: myexampleapp
      ---
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: myexampleapp
      spec:
        selector:
          matchLabels:
            app: myexampleapp
        replicas: 1
        template:
          metadata:
            labels:
              app: myexampleapp
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
              volumeMounts:
              - name: nginx-config
                mountPath: /etc/nginx
                readOnly: true
            volumes:
            - name: nginx-config
              configMap:
                name: myexample-nginx-configmap
    4. 执行以下命令,创建域名为aliyun.com的内部服务。

      kubectl apply -f myexampleapp.yaml
  2. 在ASM网关中导入myexampleapp服务。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

    3. 入口网关页面,单击目标网关的名称。

    4. 网关详情页面左侧导航栏,单击上游服务

    5. 上游服务页面,单击导入服务

    6. 导入服务页面,选择命名空间,选中myexampleapp服务,单击上游服务图标,然后单击确认

  3. 创建证书和私钥。

    1. openssl中执行以下命令,创建根证书和私钥。

      openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt
    2. 执行以下命令,为aliyun.com服务器生成证书和私钥。

      • 执行以下命令,创建证书aliyun.com.crt

        openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
      • 执行以下命令,创建私钥aliyun.com.key

        openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
  4. 添加证书和私钥挂载卷到ASM网关。

    说明
    • ASM实例从1.17版本起,支持使用证书管理页面的证书。建议您尽快将证书迁移至证书管理,即直接在证书管理页面新建一个同名证书,自动会覆盖已创建的证书,无需手动删除。关于升级实例的具体操作,请参见升级ASM实例

    • 证书管理页面的证书会自动在数据面创建同名Secret。若已存在同名Secret,则会用新内容覆盖该Secret。

    ASM实例版本为1.17以下

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

    3. 入口网关页面,单击目标网关的名称,然后在网关详情页面左侧导航栏,单击域名/证书

    4. 域名/证书页面,单击证书页签,然后单击创建

    5. 新建证书页面,输入名称,将aliyun.com.crt的内容复制到证书文本框,aliyun.com.key的内容复制到私钥文本框,然后单击创建

    ASM实例版本为1.17及以上

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 证书管理

    3. 证书管理页面,单击创建,然后在证书信息面板,配置相关信息,单击确定

      配置项

      说明

      名称

      输入证书的名称,本示例为myexample-credential

      公钥证书

      步骤3生成的aliyun.com.crt内容。

      私钥

      步骤3生成的aliyun.com.key内容。

  5. 绑定域名与证书。

    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理

    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关

    3. 入口网关页面,单击目标网关的名称,然后在网关详情页面左侧导航栏,单击域名/证书

    4. 域名/证书页面的域名页签,单击创建

    5. 新建域名页面,设置域名*.aliyun.com协议HTTPS,输入端口名称端口,选择证书,选中是否使用TLS保护连接,然后单击创建

      说明

      选中是否使用TLS保护连接,表示只有TLS请求才能访问到域名。

  6. 执行以下命令,使用HTTPS协议访问aliyun.com,验证绑定域名与证书是否成功。

    curl -k -H Host:www.aliyun.com --resolve www.aliyun.com:443:<ASM网关地址>  https://www.aliyun.com

    预期输出:

    Welcome to aliyun.com!

    如果使用HTTPS协议访问aliyun.com成功,表明绑定域名与证书成功。