文档首页 > > 常见问题> API&kubectl类> 如何通过kubectl设置工作负载的访问方式为负载均衡方式?

如何通过kubectl设置工作负载的访问方式为负载均衡方式?

分享
更新时间: 2019/12/20 GMT+08:00

以nginx为例,本节说明如何将工作负载的访问方式设置为“负载均衡”方式。

前提条件

操作步骤

  1. 登录已配置好kubectl命令弹性云服务器。登录方法请参见登录Linux弹性云服务器
  2. 创建并编辑nginx-deployment.yaml以及nginx-elb-svc.yaml文件。

    其中,nginx-deployment.yaml和nginx-elb-svc.yaml为自定义名称,您可以随意命名。

    vi nginx-deployment.yaml

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      strategy:
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx 
            imagePullPolicy: Always
            name: nginx
          imagePullSecrets:
          - name: default-secret

    vi nginx-elb-svc.yaml

    若需要开启会话保持,需要满足如下条件:

    • 自动创建ELB:
      apiVersion: v1 
      kind: Service 
      metadata: 
        annotations:   
          kubernetes.io/elb.class: union
          kubernetes.io/session-affinity-mode: SOURCE_IP
          kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0
          kubernetes.io/elb.enterpriseID: debb7ae2-6d2f-4e6c-a0aa-1ccafd92b8eb
          kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"cce-bandwidth-1551163379627","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}'
        labels: 
          app: nginx 
        name: nginx 
      spec: 
        externalTrafficPolicy: Local
        ports: 
        - name: service0 
          port: 80
          protocol: TCP 
          targetPort: 80
        selector: 
          app: nginx 
        type: LoadBalancer
    • 使用已有ELB:
      apiVersion: v1 
      kind: Service 
      metadata: 
        annotations:   
          kubernetes.io/elb.class: union
          kubernetes.io/session-affinity-mode: SOURCE_IP
          kubernetes.io/elb.id: 3c7caa5a-a641-4bff-801a-feace27424b6
          kubernetes.io/elb.subnet-id: 5083f225-9bf8-48fa-9c8b-67bd9693c4c0
        labels: 
          app: nginx 
        name: nginx 
      spec: 
        loadBalancerIP: 10.78.42.242
        externalTrafficPolicy: Local
        ports: 
        - name: service0 
          port: 80
          protocol: TCP 
          targetPort: 80
        selector: 
          app: nginx 
        type: LoadBalancer
    表1 关键参数说明

    参数

    参数类型

    描述

    kubernetes.io/elb.class

    String

    对接增强型负载均衡时需要增加此参数,值为“union”

    kubernetes.io/session-affinity-mode

    String

    可选,若需要开启会话保持,需增加该参数。

    取值“SOURCE_IP”表示基于源IP。

    kubernetes.io/elb.id

    String

    可选,但使用已有ELB时必填。

    为增强型负载均衡实例的ID。

    kubernetes.io/elb.subnet-id

    String

    可选,但自动创建时必填,Kubernetes v1.11.7-r0以上版本的集群可不填。

    kubernetes.io/elb.enterpriseID

    String

    可选,但公网或私网自动创建时必填。

    为ELB企业项目名称,选择后可以直接创建在具体的ELB企业项目下。

    kubernetes.io/elb.autocreate

    elb.autocreate object

    可选,但公网自动创建时必填,将自动创建ELB所绑定的EIP。私网自动创建时必填,将自动创建ELB。

    示例:

    • 公网自动创建:

      值为 '{"type":"public","bandwidth_name":"cce-bandwidth-1551163379627","bandwidth_chargemode":"bandwidth","bandwidth_size":5,"bandwidth_sharetype":"PER","eip_type":"5_bgp","name":"james"}'

    • 私网自动创建:

      值为 '{"type":"inner", "name": "A-location-d-test"}'

    loadBalancerIP

    String

    配置为ELB的IP地址,私网ELB配置私有IP,公网ELB配置为公网IP。

    externalTrafficPolicy

    String

    可选,若需要开启会话保持,需增加该参数,表示请求转到固定节点;若某个服务发布成ELB服务且为Local模式,客户端如果在集群内,那么必须与服务端在同一个节点上才能正常访问。

    port

    Integer

    集群虚拟IP的访问端口,也是注册到负载均衡上的端口。

    targetPort

    String

    对应界面上的容器端口

    表2 elb.autocreate字段数据结构说明

    参数

    参数类型

    描述

    name

    String

    自动创建的负载均衡的名称。

    取值范围:1-64个字符,中英文,数字,下划线,中划线。

    type

    String

    负载均衡实例网络类型,公网或者私网。

    • public:公网型负载均衡
    • inner:私网型负载均衡

    bandwidth_name

    String

    带宽的名称,默认值为:cce-bandwidth-******。

    1-64 字符,中文、英文字符、数字、下划线、中划线或点组成。

    bandwidth_chargemode

    String

    带宽付费模式。

    • bandwidth:按带宽计费
    • traffic:按流量计费

    bandwidth_size

    Integer

    带宽大小,请根据Region带宽支持范围设置,具体请参见申请弹性公网IP表4 bandwidth字段说明中size字段

    bandwidth_sharetype

    String

    带宽共享方式。

    • PER:独享带宽
    • WHOLE:共享带宽

    eip_type

    String

    弹性公网IP类型,请参考ELB支持的弹性公网IP类型,具体请参见申请弹性公网IP表3 publicip字段说明type字段

  3. 创建工作负载。

    kubectl create -f nginx-deployment.yaml

    回显如下,表示工作负载已开始创建。

    deployment "nginx" created

    kubectl get po

    回显如下,工作负载状态为Running状态,表示工作负载已运行中。

    NAME                     READY     STATUS             RESTARTS   AGE
    etcd-0                   0/1       ImagePullBackOff   0          1h
    icagent-m9dkt            0/0       Running            0          3d
    nginx-2601814895-c1xhw   1/1       Running            0          6s

  4. 创建服务。

    kubectl create -f nginx-elb-svc.yaml

    回显如下,表示服务已创建。

    service "nginx" created

    kubectl get svc

    回显如下,表示工作负载访问方式已设置成功,工作负载可访问。

    NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    etcd-svc     ClusterIP      None             <none>        3120/TCP       1h
    kubernetes   ClusterIP      10.247.0.1       <none>        443/TCP        3d
    nginx        LoadBalancer   10.247.130.196   10.78.42.242   80:31540/TCP   51s

  5. 在浏览器中输入访问地址,例如输入10.78.42.242:31540。10.78.42.242为负载均衡实例IP地址,31540为对应界面上的访问端口。

    可成功访问nginx。

    图1 通过负载均衡访问nginx(二)

分享:

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区