阿里云ACK是什么
阿里云容器服务Kubernetes版(Alibaba Cloud Container Service for Kubernetes,简称容器服务ACK)是全球首批通过Kubernetes一致性认证的服务平台,提供高性能的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理,让您轻松高效地在云端运行Kubernetes容器化应用。
Service几种暴露方式
Kubernetes Service 支持下面一些暴露方式:
NodePort
:通过每个节点上的 IP 和静态端口(NodePort)暴露服务。 NodePort 服务会路由到自动创建的 ClusterIP 服务。 通过请求 <节点 IP>:<节点端口>,你可以从集群的外部访问一个 NodePort 服务。hostNetwork: true
:Pod中运行的应用程序可以直接看到pod启动主机网络接口。hostPort
:是直接将容器端口与所调度节点上的端口路由,这样用户就可以通过宿主机IP加端口来访问Pod。LoadBalancer
:使用云提供商的负载均衡器向外部暴露服务。 外部负载均衡器可以将流量路由到自动创建的 NodePort 服务和 ClusterIP 服务上。ExternalName
:通过返回 CNAME 和对应值,可以将服务映射到 externalName 字段的内容(例如,foo.bar.example.com)。 无需创建任何类型代理。Ingress
:是自kubernetes1.1版本后引入的资源类型。必须要部署Ingress controller才能创建Ingress资源,Ingress controller是以一种插件的形式提供。Ingress controller 是部署在Kubernetes之上的Docker容器。它的Docker镜像包含一个像nginx或HAProxy的负载均衡器和一个控制器守护进程。控制器守护程序从Kubernetes接收所需的Ingress配置。它会生成一个nginx或HAProxy配置文件,并重新启动负载平衡器进程以使更改生效。换句话说,Ingress controller是由Kubernetes管理的负载均衡器。
需求
使用阿里云ACK容器服务
时,我们Service默认就支持缓存LoadBalancer
,大家有可能第一种念想,每个Service绑定一个SLB,这样会不会太浪费SLB。也可以通过Ingress
来实现外部用户访问K8S集群内部。
Ingress是可以实现,但如果我们业务中有很多不是80或者443端口访问的,并且还在一个域名,比如下面:
- www.example.com:8888
- www.example.com:8080
- www.example.com:8081
这种一般不推荐使用Ingress来实现,因为这样Ingress会开放很多端口,以后不便于维护。
那有没有在SLB充分利用前提下,实现上面的需求。方法当然有的,阿里云ACK支持多个Service绑定一个SLB多个端口
。
多个Service绑定一个SLB多个端口用法
PS:
前提条件
:需要提前在SLB控制台创建SLB,SLB需要和K8S在同一个VPC网络下
Service声明TCP协议
1 | apiVersion: v1 |
Service声明使用https协议
1 | apiVersion: v1 |
Service声明使用http协议
1 | apiVersion: v1 |
参考链接
- https://help.aliyun.com/document_detail/86531.html?spm=5176.21213303.J_6704733920.7.c5983eda1xJwdH&scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%4086531.S_0%2Bos0.ID_86531-RL_serviceDOTbetaDOTkubernetes-OR_helpmain-V_2-P0_0
- https://help.aliyun.com/document_detail/181517.html
- https://kubernetes.io/zh/docs/concepts/services-networking/service/#externalname
---本文结束感谢您的阅读。微信扫描二维码,关注我的公众号---
本文链接: https://www.yp14.cn/2021/12/08/阿里云ACK多个Service绑定单个SLB实践/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!