前言

最近在学习阿里云k8s相关容器服务ACK,于是自己创建了ACK集群,配置好了SLB、NAT、Node、EIP等相关操作,于是创建了next.js项目,并通过发布镜像到阿里云容器服务,于是在ACK上创建无状态应用选用该镜像来访问next.js网站,通过了解k8s有两种访问方式:LoadBalancer和Ingress,现在记录下来供大家参考。

前置操作

不管是LoadBalancer还是Ingress都要进行前置操作,这里先来介绍下如何去创建next.js应用。
1、配置应用基本信息
首先我们在工作负载下面->点击无状态->右上角点击使用镜像创建

image.png
2、容器配置
我们选择镜像,使用官方提供的nginx镜像,点击选择确定,其它参数默认即可。
image.png
3、高级配置
这里只需默认即可,后面会介绍如何创建Service和Ingress,点击创建。
image.png

配置Ingress访问

1、创建Service
在配置Ingress之前我们要创建Service,才能暴露Endpoint。在服务与路由菜单下点击服务,点击右上角有创建按钮。
名称自己输入即可,类型选择虚拟集群IP,并关联my-nginx,端口都设置成80,80,或者next.js的80,3000,看实际情况设定。
设定好了之后点击创建即可。
image.png
2、创建Ingress
创建好Service之后,我们再点击左侧菜单服务与路由下面的路由,点击右上角创建按钮,打开配置面板,输入自定义名称,输入域名,服务选择上一步我们创建的my-nginx-svc即可,点击创建。
image.png

3、域名访问
创建好之后我们可以通过域名或者ip即可访问我们的nginx页面。
image.png
4、注意事项
默认情况下阿里云K8S的ACK的组件管理菜单里面有个Nginx-Ingress-Controller组件,并且会多出一个监听是80和443的SLB,另外如果你的SLB是私网环境,那么你得配置EIP绑定到该SLB,这样你才能真正能访问你的网站了,如果是公网就忽略上面操作。还有一点就是你的域名解析问题,一定要解析到你的SLB所在的公网地址。
image.png
image.png

配置LoadBalancer访问

这里又可以分为:1、通过自动创建SLB服务公开应用 2、通过已有SLB服务公开应用

1、通过自动创建SLB服务公开应用

接着上面的前置操作,选择服务与路由菜单下面的服务菜单,然后点击右上角的创建按钮打开创建面板,接着我们输入服务名称,类型选择->负载均衡->公网访问->新建SLB,接着关联我们在前置操作创建的my-nginx,外部流量策略为Local,配置对应端口,再添加相关注解,下图有解释注解干嘛用的,点击创建,再点击外部IP端口即可访问我们的网站了。
image.png
image.png

2、通过已有SLB服务公开应用

和上面的操作类型,类型选择->负载均衡->公网访问->使用已有SLB->选择SLB列表下面的SLB即可,点击外部端口即可访问,跟上面相同。
image.png
3、注意事项
上面我们选择的是类型选择->负载均衡->公网访问,如果你的SLB是私网,这里也要配置成相同的私网访问,否则访问失败。

总结

1、创建k8s集群之后会创建两个SLB,一个是APIServer监听端口6445,一个是nginx-ingress-controller监听端口是80和443。
2、如果你的Service的type=ClusterIP,那么使用上面的nginx-ingress-controller的SLB即可
如果你的Service的type=LoadBalancer,那么你要么通过自动创建SLB服务公开应用,要么通过已有SLB服务公开应用,取决于你自己。
3、这里要提醒一下,如果你的SLB是支持公网的话这里不做任何操作,但是如果你的SLB是私网环境,那么你的SLB要配置EIP,允许公网访问,否则你内网的地址是打不开你的nginx网址页面的
4、LoadBalancer和Ingress的最大区别在于LB不需要创建Ingress,而Ingress必须要创建。

引用

通过负载均衡类型Service公开应用.mov
通过使用已有SLB的服务公开应用
创建无状态工作负载Deployment
通过Annotation配置负载均衡


Awbeci
3.1k 声望212 粉丝

Awbeci