公网访问-四层负载均衡可以通过弹性负载均衡从公网访问到应用,与弹性IP方式相比提供了高可靠的保障,一般用于系统中需要暴露到公网的服务。
四层负载均衡访问方式由公网弹性负载均衡ELB服务地址以及设置的访问端口组成,例如“10.117.117.117:80”。
添加方式
您可以在创建应用时设置访问方式,也可以应用创建完成后添加访问方式。
-
方式一:创建应用时配置。
-
方式二:应用创建完成后设置。
通过界面创建
本节以nginx为例进行说明。
步骤1:创建无状态应用或创建有状态应用,在“应用访问设置”步骤,单击“添加服务”。
-
服务名称:自定义服务名称,可与应用名称保持一致。
-
访问方式:公网访问。
-
访问类型:负载均衡,支持使用已有负载均衡实例和自动创建两种方式。
-
协议:请根据业务的协议类型选择。
-
容器端口:容器镜像中应用实际监听端口,需用户确定。nginx程序实际监听的端口为80。
-
访问端口:容器端口最终映射到负载均衡服务地址的端口,用负载均衡服务地址访问应用时使用,端口范围为1-65535,可任意指定。
步骤2:单击“下一步”进入“高级设置”页面,直接单击“创建”。
步骤3:单击“查看应用详情”,在“访问方式”页签下,获取方式地址,例如10.4.10.230:2。
步骤4:单击访问地址,即可跳转到访问页面。
应用创建完成后设置
步骤1:登录CCE控制台,选择左侧导航栏的“资源管理 > 网络管理”,在Service页签下,单击“添加Service”。选择类型为“公网访问”。
步骤2:设置集群内访问参数。
-
服务名称:自定义服务名称,可与应用名称保持一致。
-
集群名称:服务所在集群。
-
命名空间:服务所在命名空间。
-
关联应用:选择需要添加Service的应用。
-
访问类型:负载均衡,支持使用已有负载均衡实例和自动创建两种方式。
-
端口配置:
−协议:请根据业务的协议类型选择。
−容器端口:容器镜像中应用程序实际监听的端口,需用户确定。nginx程序实际监听的端口为80。
−访问端口:容器端口最终映射到负载均衡服务地址的端口,用负载均衡服务地址访问应用时使用,端口范围为1-65535,可任意指定。
步骤3:单击“创建”,为应用添加“公网访问-负载均衡”的服务。
kubectl命令行创建
本节以nginx为例,说明kubectl命令实现集群内访问的方法。
前提条件
配置kubectl命令,使弹性云主机连接集群。
操作步骤
步骤1:登录已配置好kubectl命令的弹性云主机。
步骤2:创建并编辑nginx-deployment.yaml以及nginx-elb-svc.yaml文件。
其中,nginx-deployment.yaml和nginx-elb-svc.yaml为自定义名称,您可以随意命名。
vi nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy:
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
imagePullSecrets:
- name: default-secret
vi nginx-elb-svc.yaml
-
负载均衡实例已创建,请使用如下示例:
apiVersion: v1
kind: Service
metadata:
annotations:
service.protal.kubernetes.io/type: LoadBalancer
kubernetes.io/elb.class: union
kubernetes.io/elb.id: a172d66c-e42f-4276-aa23-9258113478f6
labels:
app: nginx
name: nginx
spec:
loadBalancerIP: 10.78.42.242 # 配置为ELB的IP地址。
ports:
- name: service0
nodePort: 31540 # 对应界面上的访问端口,不填写表示自动生成
port: 80 # 集群虚拟IP的访问端口,也是注册到负载均衡上的端口
protocol: TCP
targetPort: 80 # 对应界面上的容器端口
selector:
app: nginx
type: LoadBalancer
-
负载均衡实例未创建,在创建service时自动创建,请使用如下示例:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
annotations:
service.protal.kubernetes.io/type: LoadBalancer
kubernetes.io/elb.class: union
kubernetes.io/elb.subnet-id: eff413e6-e6df-43e6-b586-ee36351d676d
kubernetes.io/elb.autocreate: '{"type":"public","bandwidth_name":"cce-bandwidth-1548668872423","bandwidth_chargemode":"traffic","bandwidth_size":10,"bandwidth_sharetype":"PER","eip_type":"5_bgp"}'
spec:
selector:
app: nginx
ports:
- name: cce-service-0
targetPort: 80
nodePort: 0
port: 80
protocol: TCP
type: LoadBalancer
loadBalancerIP: ''
步骤3:创建应用。
kubectl create -f nginx-deployment.yaml
回显如下,表示应用已开始创建。
deployment "nginx" created
kubectl get po
回显如下,应用状态为Running状态,表示应用已运行中。
NAME READY STATUS RESTARTS AGE
etcd-0 0/1 ImagePullBackOff 0 1h
icagent-m9dkt 0/0 Running 0 3d
nginx-2601814895-c1xhw 1/1 Running 0 6s
步骤4:创建服务。
kubectl create -f nginx-elb-svc.yaml
回显如下,表示服务已创建。
service "nginx" created
kubectl get svc
回显如下,表示应用访问方式已设置成功,应用可访问。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
etcd-svc ClusterIP None <none> 3120/TCP 1h
kubernetes ClusterIP 10.247.0.1 <none> 443/TCP 3d
nginx LoadBalancer 10.247.130.196 10.4.10.230 80:31540/TCP 51s
步骤5:在浏览器中输入访问地址,即可成功访问nginx。
例如,输入访问地址为10.4.10.230:31540,其中10.4.10.230为负载均衡实例IP地址,31540为对应界面上的访问端口。