您可以使用金山云负载均衡来访问服务,以下提供Serverless集群中的部署示例。
以下通过YAML创建示例,展示一些常见场景下,如何配置和使用LB,来满足不同的需求。首先,创建一个deployment。
nginx-deployment.yaml
如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
创建nginx deployment:
# kubectl apply -f nginx-deployment.yaml
这里我们使用金山云负载均衡向公网暴露服务。simple-svc.yaml
如下:
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx
name: simple-svc
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
创建服务,并获取服务的IP地址。
# kubectl apply -f simple-svc.yaml
# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
simple-svc LoadBalancer 10.254.171.216 120.92.xx.xx 80:32733/TCP 11s
这里,我们创建了一个名为simple-svc的服务,并通过金山云的LB(指定type为LoadBalancer)将服务暴露出去。通过EXTERNAL-IP(120.92.xx.xx),我们可以访问这个服务。在控制台上,可以看到负载均衡列表里多了一个外网LB(IP地址为120.92.xx.xx,带宽为1m,计费方式为按日月结)。
金山云LB支持丰富的配置参数,为了使用这些配置,需要使用注释(annotations),完整注释请参考后文附表。
Kubernetes的服务配置中,协议Protocol字段只支持TCP和UDP。如果想使用7层负载均衡,可以通过注释 service.beta.kubernetes.io/ksc-loadbalancer-protocol-port,注释的格式是“PROTOCOL:PORT”(PORT必须和spec:ports中的port一致)
simple-svc.yaml
如下:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/ksc-loadbalancer-protocol-port: "HTTP:80"
labels:
app: nginx
name: simple-http-svc
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
创建HTTPS类型的负载均衡需要在金山云控制台申请一个证书,然后使用如下annotation创建一个HTTPS类型的LB。
https-svc.yaml
如下:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/ksc-loadbalancer-protocol-port: "HTTPS:443"
service.beta.kubernetes.io/ksc-loadbalancer-cert-id: "your-cert-id"
labels:
app: nginx
name: https-lb
spec:
ports:
- port: 443
protocol: TCP
targetPort: 443
selector:
app: nginx
type: LoadBalancer
通过LB暴露服务时,默认会创建一个新的LB。如果不创建新的而是使用一个已经存在的LB,需要在注释中指定LB的ID(注意,如果指定的LB的PORT已经被占用,在创建服务的过程中会删除此监听器)。
支持多个Kubernetes Service复用同一个LB。限制如下:
svc-using-existing-lb.yaml
如下:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/ksc-loadbalancer-id: "your-lb-id"
labels:
app: nginx
name: svc-using-existing-lb
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
如果是内部服务,不需要将服务暴露在公网,可以使用内网LB。一种方法,是在控制台先创建好内网LB,然后通过注释指定这个LB的ID(参照上述-使用已有的LB)。另一种方法,在注释中指定LB的类型为internal,同时指定一个终端子网的ID,会新建一个内网LB将服务暴露出去。
internal-svc.yaml
如下:
apiVersion: v1
kind: Service
metadata:
annotations:
service.beta.kubernetes.io/ksc-loadbalancer-type: "internal"
service.beta.kubernetes.io/ksc-loadbalancer-subnet-id: ""your-Reserve-id"
labels:
app: nginx
name: internal-svc
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
注释 | 描述 | 默认值 |
---|---|---|
service.beta.kubernetes.io/ksc-loadbalancer-id | 负载均衡实例的 ID。通过 loadbalancer-id 指定您已有的 SLB,已有 listener 会被覆盖, 删除 service 时该 SLB 不会被删除 | |
service.beta.kubernetes.io/ksc-loadbalancer-type | 指定LB的类型,参考创建负载均衡OpenAPI中的Type字段 | public |
service.beta.kubernetes.io/ksc-loadbalancer-subnet-id | 创建内网LB时,需要指定endpoint子网。参考创建负载均衡OpenAPI中的SubnetId字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-bandwidth | 外网IP的带宽,参考创建弹性IP OpenAPI中的BandWidth字段 | 1 |
service.beta.kubernetes.io/ksc-loadbalancer-charge-type | 外网IP的计费方式,参考创建弹性IP OpenAPI中ChargeType字段 | 会根据用户已有的计费方式创建,优先选择后付费的方式PostPaidByDay |
service.beta.kubernetes.io/ksc-loadbalancer-purchase-time | 外网IP的购买时长,参考创建弹性IP OpenAPI中PurchaseTime字段 | |
service.beta.kubernetes.io/ksc-loadbalancer-protocol-port | 指定HTTP、HTTPS等协议。多个值之间由逗号分隔,比如:HTTPS:443,HTTP:80 | - |
service.beta.kubernetes.io/ksc-loadbalancer-method | 监听器的转发方式,参考创建监听器OpenAPI中的Method字段 | RoundRobin |
service.beta.kubernetes.io/ksc-loadbalancer-cert-id | 协议为HTTPS时,指定证书ID。参考创建监听器OpenAPI中的CertificateId字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-session-state | 是否开启会话保持,参考创建监听器OpenAPI中的SessionState字段 | start |
service.beta.kubernetes.io/ksc-loadbalancer-session-persistence-period | 会话保持超时时间,参考创建监听器OpenAPI中的SessionPersistencePeriod字段 | 3600 |
service.beta.kubernetes.io/ksc-loadbalancer-cookie-type | 协议为HTTP时,指定cookie类型。参考创建监听器OpenAPI中的CookieType字段 | ImplantCookie |
service.beta.kubernetes.io/ksc-loadbalancer-cookie-name | 协议为HTTP时,指定cookie名字。参考创建监听器OpenAPI中的CookieName字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-healthcheck-state | 是否开启健康检查,参考创建健康检查 OpenAPI中的HealthCheckState字段 | stop |
service.beta.kubernetes.io/ksc-loadbalancer-healthy-threshold | 健康阈值,参考创建健康检查 OpenAPI中的HealthyThreshold字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-healthcheck-interval | 健康检查时间间隔,参考创建健康检查 OpenAPI中的Interval字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-healthcheck-timeout | 健康检查超时时间,参考创建健康检查 OpenAPI中的Timeout字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-healthcheck-urlpath | HTTP类型监听器健康检查的链接,参考创建健康检查 OpenAPI中的UrlPath字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-unhealthy-threshold | 不健康阈值,参考创建健康检查 OpenAPI中的UnhealthyThreshold字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-healthcheck-hostname | HTTP类型健康检查的域名,参考创建健康检查 OpenAPI中的HostName字段 | - |
service.beta.kubernetes.io/ksc-loadbalancer-healthcheck-is-default-hostname | 参考创建健康检查 OpenAPI中的IsDefaultHostName字段 | - |
备注:
文档内容是否对您有帮助?
评价建议不能为空
非常感谢您的反馈,我们会继续努力做到更好!