通过阿里云负载均衡SLB(Server Load Balancer)暴露的服务,在集群外可通过SLB域名或IP和服务端口方式访问服务,在集群内可通过服务名和服务端口访问服务。本文介绍如何通过SLB访问服务。

前提条件

操作前请务必阅读Service的负载均衡配置注意事项

背景信息

如果您的集群的cloud-controller-manager版本大于等于v1.9.3,对于指定已有SLB,系统默认不再为该SLB处理监听。您可以通过设置service.beta.kubernetes.io/alibaba-cloud-loadbalancer-force-override-listeners: "true"参数来显示启用监听配置,或者手动配置该SLB的监听规则。

查看cloud-controller-manager的版本的方法:
  • 使用控制台:在集群组件管理页面查看CCM组件版本。
    1. 登录容器服务管理控制台
    2. 在控制台左侧导航栏,单击集群
    3. 集群列表页面,在目标集群右侧,选择更多 > 系统组件管理,进入组件管理页签查看CCM的版本信息。
  • 使用kubectl命令行(仅适用于专有版集群):执行以下命令查看CCM组件版本。
    kubectl get pod -n kube-system -o yaml|grep image:|grep cloud-con|uniq

通过命令行操作

方法一:

  1. 通过命令行工具创建一个Nginx应用。
    • 创建Nginx应用
      kubectl run nginx --image=registry.aliyuncs.com/acs/netdia:latest
    • 查询Pod
      kubectl get pod
      NAME                                   READY     STATUS    RESTARTS   AGE
      nginx-2721357637-dvwq3                 1/1       Running   1          6s
  2. 为Nginx应用创建阿里云负载均衡服务,指定type=LoadBalancer来向外网用户暴露Nginx服务。
    • 暴露服务
      kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer
    • 查看服务
      kubectl get svc
      NAME                  CLUSTER-IP      EXTERNAL-IP      PORT(S)                        AGE
      nginx                 172.19.XX.XX    101.37.XX.XX     80:31891/TCP                   4s
  3. 在浏览器中访问http://101.37.XX.XX,来访问您的Nginx服务。

方法二:

  1. 将以下YAML模板拷贝到nginx-svc.yml文件中,并保存。
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        run: nignx
      name: nginx-01
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: LoadBalancer
  2. 执行以下命令,创建一个Nginx应用。
    kubectl apply -f nginx-svc.yml
  3. 执行以下命令,向外网用户暴露Nginx服务。
    kubectl get service
    NAME           TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)        AGE9d
    ngi-01nx       LoadBalancer   172.19.XX.XX    101.37.XX.XX     80:32325/TCP   3h
  4. 在浏览器中访问http://101.37.XX.XX,来访问您的Nginx服务。

通过Kubernetes Dashboard操作

  1. 将以下YAML模板复制到nginx-svc.yml文件中,并保存。
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        run: nginx
      name: http-svc
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: LoadBalancer
  2. 登录容器服务管理控制台
  3. 在控制台左侧导航栏中,单击集群
  4. 在目标集群右侧,选择更多 > Dashboard
  5. 单击创建,开始创建应用。
    创建应用
  6. 单击使用文件创建。选择刚才保存的nginx-svc.yml文件。
  7. 单击上传
    此时,会创建一个阿里云负载均衡实例指向创建的Nginx应用,服务的名称为http-svc
  8. 在Kubernetes Dashboard上定位到default命名空间,选择服务
    可以看到刚刚创建的http-svc的Nginx服务和机器的负载均衡地址http://114.55.XX.XX:80
  9. 将该地址拷贝到浏览器中即可访问该服务。

通过控制台操作

  1. 登录容器服务管理控制台
  2. 在控制台左侧导航栏中,单击集群
  3. 集群列表页面中,单击目标集群名称或者目标集群右侧操作列下的详情
  4. 在集群管理页左侧导航栏中,单击工作负载
  5. 无状态页签中,单击使用模板创建
  6. 设置示例模板为自定义,将以下内容复制到模板中。
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        run: nginx
      name: ngnix
      namespace: default
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: LoadBalancer
  7. 单击创建

    在集群管理页面左侧导航栏,单击服务,选择目标集群和命名空间,查看已部署的服务。

更多信息

阿里云负载均衡还支持丰富的配置参数,包含健康检查、收费类型、负载均衡类型等参数,详情请参见通过Annotation配置负载均衡