一、背景
对于大多中小型公司来说,生产环境大多是购买阿里云或者腾讯云等等,也就存在以下需求:
- 外网域名
- 内网域名
- SLB
- 容器化部署
特别是前两项,一定是跳不过的。容器化部署,现在非K8S莫属了。
既然是购买阿里云,所以K8S一般也是购买阿里云的“容器服务 kubernetes版”,好处是它本身有一套web版的管理UI。
除此之外,你还需要开通的服务有:“域名服务”“云解析DNS”“负载均衡 SLB”。
本文是基于阿里云环境,讲述如何配置DNS,顺便说一下SLB。
二、部署方式
这里会有两种场景,一者是ECS,另外就是K8S。
1、ECS部署方式
2、K8S部署方式
当然,上面的nginx也可被nginx ingress替代。
见下图:
三、配置DNS
内网域名是xxx.cloud,外网域名是xxx.net。子域名是对应具体的服务,比如本文的文件服务,就是file前缀。
1、外网域名
云解析DNS
因为我已添加完成,所以这里仅作修改示例:
- 主机记录,输入file,后面的外网域名是固定的,xxx.net。合起来就是file.xxx.net域名。
- 记录值,填写SLB负载均衡的地址,如果没有使用SLB,则填写API网关的地址。
2、内网域名
操作和外网域名没什么区别,这里展示ECS部署场景下,该如何配置DNS。这里没有SLB。
区别是,这里的记录值填写Nginx的地址,并且我们会添加两条“file.xxx.cloud”的记录。
两条记录的唯一差别是记录值不同,指向两个nginx节点,因为这里使用了nginx集群。
四、SLB
上文说了,我们购买了阿里云的SLB,所以下面简单讲述,如果没有内外网域名,直接暴露外网SLB地址给客户端。
见下图所示:
上图中使用的SLB,就是外网域名指向的地址。
下面,看下它的后端服务器:
可以说,怎么配置SLB,在阿里云UI操作还是比较直观的,不在本文的细说。
SLB对nginx2和nginx3的负载均衡。
内网SLB
上面购买的是外网slb,如果你不需要直接暴露slb地址的话,购买内网slb即可。
注意,这里的服务地址是10开头的内网IP。
本SLB的配置后端服务器,和上文的SLB不同的地方在于,使用了虚拟服务器组,而上文使用的默认服务器组。
- 负载均衡默认是在实例维度上维护后端服务器组,即实例下的所有监听都使用相同的后端服务器组。虚拟服务器组允许用户在监听维度上个性化定义服务器组,即实例下的不同监听可使用不同的后端服务器组,可满足域名和URL转发个性化需求。
说白了,就是一个slb可以转发多个端口。
这里维护了两个nginx节点
SLB实现k8s的service
当 Service 类型是 LoadBalancer 时,Kubernetes 会创建云提供商的负载均衡器,并将外部流量引导到集群中相应的 Node 上。
可以明显看到,这里使用了虚拟服务器组,端口进行了一一映射。
正因为虚拟服务器组,才使得一个slb能够对许多后端服务进行负载均衡。
五、nginx ingress
1、创建slb
2、创建服务的ingress访问
当然,ingress的前提是要先创建service,因为service不在本文讲述范围,略去,下面看一下ingress的yaml。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: xxx
namespace: java-service
spec:
# Ingress Class必填
ingressClassName: ack-nginx
rules:
- host: file.xxx.cloud
http:
paths:
- backend:
service:
name: message-server
port:
number: 8100
path: /
pathType: ImplementationSpecific
# 注意看它指向的slb
status:
loadBalancer:
ingress:
- ip: 10.224.171.70
可以看出,nginx ingress是依赖service和slb的,当然service本身也采用了slb实现。
所以,这里就使用了两个slb。一个是ingress要用到的,另外一个是service需要的。
六、说在最后的话
因为阿里云的文档本身已很丰富全面了,本文不意再重复一遍,如果在看本文的时候,有不清楚的地方,还望见谅,结合官方文档可能更佳。