基于ACK实现与钉钉安全域名的配置

概述

本文介绍基于ACK与钉钉开放平台的安全域名打通的流程。该流程主要通过配置ACK中类型为LoadBalancer的Service来实现,配置类型为LoadBalancer的Service主要有两种方式:

  • 没有可用的SLB时,ACK的CCM(Cloud Controller Manager)组件可以为LoadBalancer类型的Service自动创建SLB,并对其进行管理。

  • 已有可用的SLB时,关联SLB与ACK的Service。内网SLB与ACK的Service关联之后,内网SLB继续走钉钉安全域名的其他流程,就可以通过SLB公开ACK中的应用,也就实现了基于ACK与钉钉开放平台的安全域名打通。

前提条件

使用已有SLB关联ACK的Service时需要满足以下条件:

  • 已有可用的内网SLB实例。

  • 已有Kubernetes集群。

  • Kubernetes集群与内网SLB位于同一地域下的同一个VPC内。

操作步骤

关联SLB与ACK的Service有两种方式,分别是通过控制台关联和通过kubectl关联,您可以选择其中一种方式进行操作。

通过控制台关联SLB与ACK的Service

一、创建应用

  1. 登录容器服务管理控制台

  2. 在集群列表页面,单击目标集群的应用管理image

  3. 进入工作负载的无状态页面,单击右上角的使用镜像创建

  4. 进入创建应用页面后,根据需要配置应用基本信息镜像信息image

  5. 配置完成后,生成部署的应用my-nginx。image

二、创建关联已有SLB的Service

  1. 在集群管理页左侧导航栏中,选择网络 > 服务

  2. 服务页面,单击右上角的创建

  3. 在服务创建页面,设置服务的相关参数,各个参数的详细说明参考通过使用已有SLB的服务公开应用image

  • 选择服务类型为负载均衡,并设置为私网访问,选择使用已有的SLB, 并选择设已有的在同一VPC内的SLB。

  • 强制覆盖已有监听:选择是否强制覆盖SLB上的已有监听或者为没有监听的SLB自动创建监听,本示例中的SLB实例为新创建的,所以需要为其创建监听。以下两种情况不建议选择强制覆盖监听。

    • 如果已有负载均衡的监听上绑定了业务,强制覆盖可能会引发业务中断。

    • 由于CCM目前支持的后端配置有限,无法处理一些复杂配置。如果有复杂的后端配置需求,可以在不覆盖监听的情况下,通过控制台自行配置监听

  • 关联上文创建的应用。

  • 配置外部流量策略。

    • Local:流量只发给本机的Pod。

    • Cluster:流量可以转发到集群中其他节点上的Pod。

  • 端口映射:添加服务端口(对应Service YAML文件中的port)和容器端口(对应Service YAML文件中的targetPort),容器端口需要与后端的Pod中暴露的容器端口一致。

  • 注解:通过为该服务添加注解,可以配置负载均衡的参数,可以选择自定义注解或阿里云注解,这里添加的注解为设置服务的收费方式按照流量收费。注解的详情参考通过Annotation配置负载均衡

  1. 创建服务后,在服务页面可以看到新创建的服务,通过其外部端点就在内网下就可以访问Kubernetes中的应用了。image

通过kubectl关联SLB与ACK的Service

一、配置kubectl连接Kubernetes集群

连接Kubernetes 集群主要有以下两种方式:

使用这两种方式的前提是Kubernetes 集群开启了API Server 公网访问,如果在创建集群时没有绑定EIP,在创建集群后在集群信息页面,单击基本信息页签,然后在集群信息区域,单击绑定EIP

image

在弹出的绑定EIP对话框中,选择已有EIP,然后单击确定。绑定完成后,API Server公网连接端点将会显示公网IP地址。

二、创建应用

创建应用可以通过上文所述的通过控制台的方式,也可以使用kubectl命令行方式进行。

  1. 使用以下示例应用的YAML内容,创建名为my-nginx.yaml文件。

    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: my-nginx    #示例应用的名称。
      labels:
        app: nginx
    spec:
      replicas: 3       #设置副本数量。
      selector:
        matchLabels:
          app: nginx     #对应服务中Selector的值需要与其一致,才可以通过服务公开此应用。
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.aliyuncs.com/acs/netdia:latest     #替换为您实际的镜像地址,格式为:<image_name:tags>。
            ports:
            - containerPort: 80                                #需要在服务中暴露该端口。
  2. 执行以下命令,部署示例应用my-nginx。

    kubectl apply -f my-nginx.yaml
  3. 执行以下命令,确认示例应用状态正常。

    kubectl get deployment my-nginx
  4. 返回结果示例:

    NAME       READY   UP-TO-DATE   AVAILABLE   AGE
    my-nginx   0/3     3            0           103s

三、创建关联已有SLB的Service

  1. 使用以下示例服务的YAML内容,创建名为my-nginx-svc.yaml的文件。

  • 修改service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id,请替换${YOUR_LB_ID}为您通过负载均衡管理控制台创建的SLB实例ID。

  • 使用已有的SLB实例时,默认情况下不会为该SLB创建监听或覆盖已有监听。如有需要,请设置service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners为true。本示例中,SLB实例为新创建,需要为其创建监听,因此设为true。更多注解请参见通过Annotation配置负载均衡

  • 将selector修改为my-nginx.yaml示例应用文件中matchLabels的值(即:app: nginx),从而将该服务关联至后端应用。

  1. 执行以下命令创建名为my-nginx-svc的服务,并通过其公开应用。

    kubectl apply -f my-nginx-svc.yaml
  2. 执行以下命令确认LoadBalancer类型的服务创建成功。

    kubectl get svc my-nginx-svc

    返回结果示例:

    NAME           TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
    my-nginx-svc   LoadBalancer   192.168.25.11   10.32.0.132   80:31664/TCP   19s
  3. 由于绑定的是一个内网SLB,在VPC外不能通过EXTERNAL-IP来访问应用,可以为该SLB绑定一个EIP,通过EIP访问该应用。image

导入ACK资源到计算巢应用管理

  1. 在完成上述步骤后,我们得到一个Service关联了SLB的ACK集群,在ACK控制台查看ACK集群的详情,获得标签信息。image

  2. 在计算巢控制台,在ACK集群部署的地域下创建应用分组,通过标签选择的方式,输入ACK的标签键标签值image

  3. 应用分组创建成功后,在资源管理中可以看到已经导入的ACK的资源。