七层负载均衡是采用了增强型弹性负载均衡,在四层负载均衡访问方式的基础上支持了URI配置,通过对应的URI将访问流量分发到对应的服务。同时,服务根据不同URI实现不同的功能。
七层负载均衡访问方式由弹性负载均衡ELB服务地址、设置的访问端口、定义的URI组成,例如:10.117.117.117:80/helloworld。
通过配置公网类型和私网类型的负载均衡实例可以实现公网的七层路由转发和内网(同一VPC内)的七层路由转发。
添加方式
您可以在创建应用时设置访问方式,也可以应用创建完成后添加访问方式。
-
方式一:创建应用时配置。
-
方式二:应用创建完成后配置,此配置对工作应用无影响,且实时生效。
通过界面创建
本节以ingress-test应用为例进行说明。
步骤1:创建应用;
-
若创建应用时,配置了应用访问方式,且设置为“VPC内网访问”,请直接执行步骤3。
-
若创建应用未设置访问方式,请先执行步骤2。
步骤2:(可选)若创建应用时,未配置“VPC内网访问”,请执行如下操作。
1. 单击CCE左侧导航栏的“资源管理 > 网络管理”。
2. 在Service页签下,单击“添加Service”。选择类型为“VPC内网访问”。
−服务名称:自定义服务名称,可与应用名称保持一致。
−集群名称:选择需要添加Service的集群。
−命名空间:选择需要添加Service的命名空间。
−关联应用:单击“选择应用”,选择需要配置VPC内网访问的应用名称,单击“确定”。
−访问类型:选择节点IP。
−端口配置:
-
协议:请根据业务的协议类型选择。
-
容器端口:容器镜像中应用实际监听的端口,需用户确定。nginx程序实际监听的端口为80。
-
访问端口:容器端口映射到节点私有IP上的端口,用私有IP访问应用时使用,端口范围为30000-32767,建议选择“自动生成”。
-
自动生成:系统会自动分配端口号。
-
指定端口:指定固定的节点端口,默认取值范围为30000-32767。若指定端口时,请确保同个集群内的端口唯一性。
3. 单击“创建”,为应用添加VPC内网访问方式。
步骤3:添加Ingress类型的Service。
1. 单击CCE左侧导航栏的“资源管理 > 网络管理”。
2. 在Ingress页签下,单击“添加Ingress”。
−Ingress名称:自定义Ingress名称,例如ingress-demo。
−集群名称:选择需要添加Ingress的集群。
−命名空间:选择需要添加Ingress的命名空间。
−增强型负载均衡实例:支持使用已有负载均衡实例和自动创建两种方式。
−对外端口:开放在负载均衡服务地址的端口,可任意指定。
−对外协议:支持HTTP和HTTPS。若选择HTTPS,请选择密钥证书。密钥证书需提前创建,密钥类型为IngressTLS。
−域名:实际访问的域名地址,对应负载均衡服务域名地址,需用户购买备案自己的域名,可选填。一旦配置了域名规则,则必须使用域名访问。否则,可以使用负载均衡实例的IP地址访问。
−路由配置:
-
路由匹配规则:前缀匹配、精确匹配、正则匹配。
-
前缀匹配:例如映射URL为/healthz,只要符合此前缀的URL均可访问。例如/healthz/v1,/healthz/v2。
-
精确匹配:表示精准匹配,只有完全匹配上才能生效。例如映射URL为/healthz,则必须为此URL才能访问。
-
正则匹配:可设定映射URL规范,例如规范为/[A-Za-z0-9_.-]+/test。只要符合此规则的URL均可访问,例如/abcA9/test,/v1-Ab/test。正则匹配规则支持POSIX与Perl两种标准。
-
映射URL:需要注册的访问路径,例如:/healthz。
-
服务名称:选择需要添加Ingress的服务,该服务访问类型为VPC内网服务。若服务不存在,请单击“点此创建服务 ”去创建一个服务。
-
容器端口:容器镜像中容器实际监听端口,需用户确定。例如:defaultbackend程序实际监听的端口为8080。
步骤4:单击“创建”。
创建完成后,在Ingress列表可查看到已创建成功的Ingress。
步骤5:访问应用(例如名称为defaultbackend)的“/healthz”接口。
1. 获取defaultbackend“/healthz”接口的访问地址,访问地址有负载均衡实例、对外端口、映射URL组成,例如:10.154.76.63:80/healthz。
2. 在浏览器中输入“/healthz”接口的访问地址,即可成功访问应用。
kubectl命令行创建
本节以nginx为例,说明kubectl命令实现ingress访问的方法。
前提条件
配置kubectl命令,使弹性云主机连接集群。
步骤1:登录已配置好kubectl命令的弹性云主机。
步骤2:创建ingress-test-deployment.yaml、ingress-test-svc.yaml、ingress-test-ingress.yaml以及ingress-test-secret.yaml文件。
ingress-test-deployment.yaml、ingress-test-svc.yaml、ingress-test-ingress.yaml、ingress-test-secret.yaml为自定义名称,您可以随意命名。
选择HTTPS协议时,才需要创建密钥证书ingress-test-secret.yaml。
vi ingress-test-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ingress-test
spec:
replicas: 1
selector:
matchLabels:
app: ingress-test
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: ingress-test
spec:
containers:
#第三方公开镜像,可以参见描述获取地址,也可以使用自己的镜像
- image: nginx
imagePullPolicy: Always
name: nginx
vi ingress-test-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: ingress-test
name: ingress-test
spec:
ports:
- name: service0
port: 8080 #集群虚拟IP的访问端口
protocol: TCP
targetPort: 8080 #对应界面上的容器端口,应用程序实际监听的端口
#若需要设置多个端口,可依次填写,如下展示
- name: service1
port: 8081
protocol: TCP
targetPort: 8081
selector:
app: ingress-test
type: NodePort #采用Nodeport的访问类型连接负载均衡
vi ingress-test-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/elb.ip: 192.168.0.39 #必填,为负载均衡增强型实例的服务地址,公网ELB配置为公网IP,私网ELB配置为私网IP
kubernetes.io/elb.port: "80" #必填,界面上的对外端口,为注册到负载均衡服务地址上的端口
name: ingress-test
spec:
tls: #可选,HTTPS协议时,需添加此参数
- secretName: test-secret #可选,HTTPS协议时添加,配置为创建的密钥证书名称
rules:
- http:
paths:
- backend:
serviceName: ingress-test #为ingress-test-svc.yaml的服务名称
servicePort: 8080 #为ingress-test-svc.yaml的targetPort,即容器端口
property:
ingress.beta.kubernetes.io/url-match-mode: EQUAL_TO #路由匹配策略,可选值为EQUAL_TO(精确匹配)、STARTS_WITH(前缀匹配)、REGEX(正则匹配)
path: "/healthz" #为路由,用户自定义设置
vi ingress-test-secret.yaml
apiVersion: v1
data:
tls.crt: LS0tLS1CRUdJ*******0tCg==
tls.key: LS0tLS1******ZLS0tLS0K
kind: Secret
metadata:
annotations:
description: test for ingressTLS secrets
name: test-secret
namespace: default
type: IngressTLS
步骤3:创建应用。
kubectl create -f ingress-test-deployment.yaml
回显如下,表明应用已创建。
deployment "nginx" created
kubectl get po
回显如下,表明应用创建成功。
NAME READY STATUS RESTARTS AGE
ingress-test-1627801589-r64pk 1/1 Running 0 6s
步骤4:创建密钥。
kubectl create -f ingress-test-secret.yaml
回显如下,表明密钥已创建。
secret "ingress-test-secret" created
kubectl get secrets
回显如下,表明密钥创建成功。
NAME TYPE DATA AGE
dash-dashboard Opaque 0 7d
dash-dashboard-token-f2nbk kubernetes.io/service-account-token 3 7d
default-secret kubernetes.io/dockerconfigjson 1 8d
default-token-wfn4l kubernetes.io/service-account-token 3 8d
paas.elb cfe/secure-opaque 2 8d
ingress-test-secret IngressTLS 2 13s
步骤5:创建服务。
kubectl create -f ingress-test-svc.yaml
回显如下,表示服务已创建。
service "ingress-test" created
kubectl get svc
回显如下,表示服务创建成功。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-test NodePort 10.247.189.207 <none> 8080:30532/TCP 5s
kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3d
kubectl create -f ingress-test-ingress.yaml
回显如下,表示ingress服务已创建。
ingress "ingress-test" created
kubectl get ingress
回显如下,表示ingress服务创建成功,应用可访问。
NAME HOSTS ADDRESS PORTS AGE
ingress-test * 10.154.76.63 80 10s
步骤6:在浏览器中输入访问地址http://10.154.76.63/healthz。
其中10.154.76.63为统一负载均衡实例的IP地址。