介绍:
ASK为阿里云推出的无服务器Kubernetes容器服务Serverless Kubernetes。
ALB为阿里云推出的应用型负载均衡(Application Load Balancer)
ALB Ingress Controller为阿里云应用型负载均衡ALB在容器下的组件,提供Ingress流量管理。
为什么不用Nginx Ingress Controller呢?
Nginx Ingress Controller在
livenessprobe 在高负载下容易超时失败;
开启prometheus采集指标监控后,高负载情况下容易出现OOM,导致容器被Kill。
https://help.aliyun.com/document_detail/160658.htm
测试
ALB 作为应用侧的负载均衡,肯定不会以单独的产品工作的,作为下游,前端可以部署WAF、API网关等,
作为上游,后端可以联动ACK、ASK,FAAS,SAE、ECS等产品。
ASK+ALB实践
先创建一个ASK集群。
注意 选择 ALB Ingress ,监控服务Arms和日志SLS等,如果是上生产也最好开通下。
如果前期没有安装ALB Ingress,创建完容器集群后也可以去组件管理页面安装ALB Ingress Controller。
配置应用
1,配置deployment、svc
demo-test-ask.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-test-ask
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: demo-test-ask
template:
metadata:
labels:
app: demo-test-ask
spec:
containers:
- name: demo-test-ask
image: registry-vpc.cn-hangzhou.aliyuncs.com/xxx/demotest-newflow_testing:20230217151402
ports:
- containerPort: 8080
resources:
limits:
cpu: "0.2"
ephemeral-storage: 5Gi
memory: 0.5Gi
---
apiVersion: v1
kind: Service
metadata:
name: demo-test
namespace: default
spec:
ports:
- port: 8080
targetPort: 8080
protocol: TCP
selector:
app: demo-test-ask
clusterIP: None
注意:
image 地址为自己的SpringBoot项目,将jar包打入到Docker镜像里,上传到阿里云镜像服务。
HTTP请求内容就是一个简单的controller:
resources 里定义了一个0.2核,0.5G内存的资源。
service 名称为 demo-test,需要和后面ingress name一致。
执行 kubectl apply -f demo-test-ask.yaml
查看 service 和 deployment
2,下面配置Ingress 服务
2.1 创建 AlbConfig
创建ALB实例的时候使用。
alb-test.yaml
kind: AlbConfig
metadata:
name: default
spec:
config:
name: alb-test
addressType: Internet
zoneMappings:
- vSwitchId: vsw-bp1b36wd3oxxx
- vSwitchId: vsw-bp1vefgpbdxxx
addressType项:
Internet(默认值):负载均衡具有公网IP地址,DNS域名被解析到公网IP,因此可以在公网环境访问。
Intranet:负载均衡只有私网IP地址,DNS域名被解析到私网IP,因此只能被负载均衡所在VPC的内网环境访问。
此处创建一个公网的ALB,使用2个可用区。
2.2 创建IngressClass
alb.yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: alb
spec:
controller: ingress.k8s.alibabacloud/alb
parameters:
apiGroup: alibabacloud.com
kind: AlbConfig
name: default
3, 创建Ingress
因为第一次创建ingress,所以会自动创建ALB实例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-ingress-now
spec:
ingressClassName: alb
rules:
- host: ask-hos.daily.fh-inc.com
http:
paths:
# 配置Context Path
- path: /demotest-newflow
pathType: ImplementationSpecific
backend:
service:
name: demo-test
port:
number: 8080
注意此处
ingressClassName: alb
是绑定到 ALB实例的,如果不指定,就无法在ALB 服务器组生成对应配置,也就无法转发,会报503
暴露host地址:ask-hos.daily.fh-inc.com,为内网测试地址,后面需要绑定hosts测试。
测试项目的请求路径为:/demotest-newflow
绑定的service 为 上面定义的demo-test
执行apply
4,ALB实例自动创建
创建了 2个 EIP 公网地址和2个 VIP内网地址。
172.16.174.190
172.16.142.88
VIP地址是绑定的VSwitch定义的CIDR范围。
自动关联2个EIP
测试应用
绑定hosts,如果本地没有打通到VPC的内网网络,可以直接绑定公网的ALB地址测试,任何一个EIP都可以。
本地测试:
返回hello world 成功
或者使用阿里云DNS的 PrivateZone服务,VPC内都获取这个内部DNS记录
在ECS 服务器上测试,不用绑定hosts,直接访问即可。
另外,使用ASK后,我们的Pod都在ECI上,可以看到弹性容器实例的相关信息。
如果接入Arms-Prometheus,能观察到Pod的状态和指标。