您可以使用阿里云负载均衡来访问服务。
通过命令行操作
- 通过命令行工具创建一个 Nginx 应用。root@master # kubectl run nginx --image=registry.aliyuncs.com/acs/netdia:latestroot@master # kubectl get poNAME READY STATUS RESTARTS AGEnginx-2721357637-dvwq3 1/1 Running 1 6s
- 为 Nginx 应用创建阿里云负载均衡服务,指定 type=LoadBalancer 来向外网用户暴露 Nginx 服务。root@master # kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancerroot@master # kubectl get svcNAME CLUSTER-IP EXTERNAL-IP PORT(S) AGEnginx 172.19.10.209 101.37.192.20 80:31891/TCP 4s
- 在浏览器中访问 http://101.37.192.20,来访问您的 Nginx 服务。
更多信息
阿里云负载均衡还支持丰富的配置参数,包含健康检查、收费类型、负载均衡类型等参数。详细信息参见
负载均衡配置参数表。
注释
阿里云可以通过注释的形式支持丰富的负载均衡功能。
使用已有的内网 SLB
需要指定两个 annotation。注意修改成您自己的 Loadbalancer-id。apiVersion: v1kind: Servicemetadata:annotations:service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranetservice.beta.kubernetes.io/alicloud-loadbalancer-id: your-loadbalancer-idlabels:run: nginxname: nginxnamespace: defaultspec:ports:- name: webport:
80protocol: TCPtargetPort:
80selector:run: nginxsessionAffinity: Nonetype: LoadBalancer
然后保存为 slb.svc 后,执行 kubectl apply -f slb.svc。
创建 HTTPS 类型的 Loadbalancer
先在阿里云控制台上创建一个证书并记录 cert-id, 然后使用如下 annotation 创建一个 HTTPS 类型的 SLB。apiVersion: v1kind: Servicemetadata:annotations:service.beta.kubernetes.io/alicloud-loadbalancer-cert-id: your-cert-idservice.beta.kubernetes.io/alicloud-loadbalancer-protocol-port:
"https:443"labels:run: nginxname: nginxnamespace: defaultspec:ports:- name: webport:
443protocol: TCPtargetPort:
443selector:run: nginxsessionAffinity: Nonetype: LoadBalancer
[tr=transparent]
[/url]说明[tr=transparent]注释的内容是区分大小写的。
[tr=rgb(51, 205, 229)][td]注释
描述 | 默认值 |
service.beta.kubernetes.io/alicloud-loadbalancer-protocol-port | 多个值之间由逗号分隔,比如:https:443,http:80 | 无 |
service.beta.kubernetes.io/alicloud-loadbalancer-address-type | 取值可以是 internet 或者 intranet | internet |
service.beta.kubernetes.io/alicloud-loadbalancer-slb-network-type | 负载均衡的网络类型,取值可以是 classic 或者 vpc | classic |
service.beta.kubernetes.io/alicloud-loadbalancer-charge-type | 取值可以是 paybytraffic 或者 paybybandwidth | paybybandwidth |
service.beta.kubernetes.io/alicloud-loadbalancer-id | 负载均衡实例的 ID。通过 loadbalancer-id 指定您已有的 SLB,已有 listener 会被覆盖, 删除 service 时该 SLB 不会被删除。 | 无 |
service.beta.kubernetes.io/alicloud-loadbalancer-backend-label | 通过 label 指定 SLB 后端挂哪些节点。 | 无 |
service.beta.kubernetes.io/alicloud-loadbalancer-region | 负载均衡所在的地域 | 无 |
service.beta.kubernetes.io/alicloud-loadbalancer-bandwidth | 负载均衡的带宽 | 50 |
service.beta.kubernetes.io/alicloud-loadbalancer-cert-id | 阿里云上的认证 ID。您需要先上传证书 | “” |
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-flag | 取值是 on 或者 off | 默认为 off。TCP 不需要改参数。因为 TCP 默认打开健康检查,用户不可设置。 |
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-type | 参见[url=https://help.aliyun.com/document_detail/27594.html#slb_api_CreateLoadBalancerTCPListener__table_u2n_zrk_cz]HealthCheck | |
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-uri | 参见 HealthCheck | |
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-connect-port | 参见 HealthCheck | |
service.beta.kubernetes.io/alicloud-loadbalancer-healthy-threshold | 参见 HealthCheck | |
service.beta.kubernetes.io/alicloud-loadbalancer-unhealthy-threshold | 参见 HealthCheck | |
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-interval | 参见 HealthCheck | |
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-connect-timeout | 参见 HealthCheck | |
service.beta.kubernetes.io/alicloud-loadbalancer-health-check-timeout | 参见 HealthCheck | |