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
      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网关。
    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关
    3. 入口网关页面,单击目标网关的名称。
    4. 在网关详情页面左侧导航栏,单击域名/证书
    5. 域名/证书页面,单击证书页签,然后单击创建
    6. 新建证书页面,输入名称,将aliyun.com.crt的内容复制到证书文本框,aliyun.com.key的内容复制到私钥文本框,然后单击创建
      证书
  5. 绑定域名与证书。
    1. 域名/证书页面,单击域名页签,然后单击创建
    2. 新建域名页面,设置域名*.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成功,表明绑定域名与证书成功。

为域名添加已有证书

  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
      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. 导入证书至ASM网关。
    在已有证书中添加istioGateway:<ASM网关名称>provider:asm标签。添加标签成功后,证书将会自动出现在ASM控制台的证书页面。导入证书
  4. 绑定域名与证书。
    1. 登录ASM控制台,在左侧导航栏,选择服务网格 > 网格管理
    2. 网格管理页面,单击目标实例名称,然后在左侧导航栏,选择ASM网关 > 入口网关
    3. 入口网关页面,单击目标网关的名称。
    4. 在网关详情页面左侧导航栏,单击域名/证书
    5. 域名/证书页面,单击域名页签,然后单击创建
    6. 新建域名页面,设置域名*.aliyun.com协议HTTPS,输入端口名称端口,选择证书,选中是否使用TLS保护连接,然后单击创建
      选中是否使用TLS保护连接,表示只有TLS请求才能访问到域名。域名
  5. 执行以下命令,使用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成功,表明绑定域名与证书成功。