概述
本文介绍基于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
一、创建应用
登录容器服务管理控制台。
在集群列表页面,单击目标集群的应用管理。
进入工作负载的无状态页面,单击右上角的使用镜像创建。
进入创建应用页面后,根据需要配置应用基本信息和镜像信息。
配置完成后,生成部署的应用my-nginx。
二、创建关联已有SLB的Service
在集群管理页左侧导航栏中,选择网络 > 服务。
在服务页面,单击右上角的创建。
在服务创建页面,设置服务的相关参数,各个参数的详细说明参考通过使用已有SLB的服务公开应用。
选择服务类型为负载均衡,并设置为私网访问,选择使用已有的SLB, 并选择设已有的在同一VPC内的SLB。
强制覆盖已有监听:选择是否强制覆盖SLB上的已有监听或者为没有监听的SLB自动创建监听,本示例中的SLB实例为新创建的,所以需要为其创建监听。以下两种情况不建议选择强制覆盖监听。
如果已有负载均衡的监听上绑定了业务,强制覆盖可能会引发业务中断。
由于CCM目前支持的后端配置有限,无法处理一些复杂配置。如果有复杂的后端配置需求,可以在不覆盖监听的情况下,通过控制台自行配置监听
关联上文创建的应用。
配置外部流量策略。
Local:流量只发给本机的Pod。
Cluster:流量可以转发到集群中其他节点上的Pod。
端口映射:添加服务端口(对应Service YAML文件中的port)和容器端口(对应Service YAML文件中的targetPort),容器端口需要与后端的Pod中暴露的容器端口一致。
注解:通过为该服务添加注解,可以配置负载均衡的参数,可以选择自定义注解或阿里云注解,这里添加的注解为设置服务的收费方式按照流量收费。注解的详情参考通过Annotation配置负载均衡。
创建服务后,在服务页面可以看到新创建的服务,通过其外部端点就在内网下就可以访问Kubernetes中的应用了。
通过kubectl关联SLB与ACK的Service
一、配置kubectl连接Kubernetes集群
连接Kubernetes 集群主要有以下两种方式:
使用这两种方式的前提是Kubernetes 集群开启了API Server 公网访问,如果在创建集群时没有绑定EIP,在创建集群后在集群信息页面,单击基本信息页签,然后在集群信息区域,单击绑定EIP。
在弹出的绑定EIP对话框中,选择已有EIP,然后单击确定。绑定完成后,API Server公网连接端点将会显示公网IP地址。
二、创建应用
创建应用可以通过上文所述的通过控制台的方式,也可以使用kubectl命令行方式进行。
使用以下示例应用的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 #需要在服务中暴露该端口。
执行以下命令,部署示例应用my-nginx。
kubectl apply -f my-nginx.yaml
执行以下命令,确认示例应用状态正常。
kubectl get deployment my-nginx
返回结果示例:
NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 0/3 3 0 103s
三、创建关联已有SLB的Service
使用以下示例服务的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),从而将该服务关联至后端应用。
执行以下命令创建名为my-nginx-svc的服务,并通过其公开应用。
kubectl apply -f my-nginx-svc.yaml
执行以下命令确认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
由于绑定的是一个内网SLB,在VPC外不能通过EXTERNAL-IP来访问应用,可以为该SLB绑定一个EIP,通过EIP访问该应用。
导入ACK资源到计算巢应用管理
在完成上述步骤后,我们得到一个Service关联了SLB的ACK集群,在ACK控制台查看ACK集群的详情,获得标签信息。
在计算巢控制台,在ACK集群部署的地域下创建应用分组,通过标签选择的方式,输入ACK的标签键和标签值。
应用分组创建成功后,在资源管理中可以看到已经导入的ACK的资源。