您可以使用阿里云负载均衡来访问服务。
通过命令行操作
- 通过命令行工具创建一个 Nginx 应用。
root@master # kubectl run nginx --image=registry.aliyuncs.com/acs/netdia:latest root@master # kubectl get po NAME READY STATUS RESTARTS AGE nginx-2721357637-dvwq3 1/1 Running 1 6s
- 为 Nginx 应用创建阿里云负载均衡服务,指定
type=LoadBalancer
来向外网用户暴露 Nginx 服务。root@master # kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer root@master # kubectl get svc NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx 172.19.10.209 101.37.192.20 80:31891/TCP 4s
- 在浏览器中访问
http://101.37.192.20
,来访问您的 Nginx 服务。
更多信息
阿里云负载均衡还支持丰富的配置参数,包含健康检查、收费类型、负载均衡类型等参数。详细信息参见负载均衡配置参数表。
注释
阿里云可以通过注释的形式支持丰富的负载均衡功能。
使用已有的内网 SLB
需要指定两个 annotation。注意修改成您自己的 Loadbalancer-id。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
service.beta.kubernetes.io/alicloud-loadbalancer-id: your-loadbalancer-id
labels:
run: nginx
name: nginx
namespace: default
spec:
ports:
- name: web
port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
sessionAffinity: None
type: LoadBalancer
然后保存为 slb.svc 后,执行 kubectl apply -f slb.svc
。
创建 HTTPS 类型的 Loadbalancer
先在阿里云控制台上创建一个证书并记录 cert-id, 然后使用如下 annotation 创建一个 HTTPS 类型的 SLB。
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/alicloud-loadbalancer-cert-id: your-cert-id
service.beta.kubernetes.io/alicloud-loadbalancer-protocol-port: "https:443"
labels:
run: nginx
name: nginx
namespace: default
spec:
ports:
- name: web
port: 443
protocol: TCP
targetPort: 443
selector:
run: nginx
sessionAffinity: None
type: LoadBalancer
说明 注释的内容是区分大小写的。
注释 | 描述 | 默认值 |
---|---|---|
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 | 参见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 |