关于paas:详解-Rainbond-Ingress-泛解析域名机制

4次阅读

共计 2763 个字符,预计需要花费 7 分钟才能阅读完成。

Rainbond 作为一款云原生利用治理平台,天生带有疏导南北向网络流量的分布式网关 rbd-gateway。区别于个别的 Ingress 配置中,用户须要自行定义域名的应用体验,Rainbond 的网关策略能够一键主动生成域名拜访策略,用户通过这个域名能够立即拜访到部署在 Rainbond 上的业务零碎。这个应用体验在开发测试场景下十分敌对,这篇文章详解了这一机制到底是如何实现的。

Gateway 与 Ingress

Rainbond 团队开发了高性能分布式网关组件 rbd-gateway,作为集群外部的 Ingress Controller 解决集群南北流量。它同时反对 L4 和 L7 层协定,以及一键开启 WebSocket 等高级性能。在应用它的时候,一个细节性能点十分好用,就是能够一键生成一个能够被拜访的域名地址。

这个域名的格局详解如下:

http://<servicePort>.<service_alias>.<tenant_name>.17a4cc.grapps.cn/

- servicePort: 拜访策略对应的指标端口名称
- service_alias: 以后服务组件的别名
- tenant_name: 以后团队的别名
- .17a4cc.grapps.cn: 以后集群的泛解析域名 

实际上,这一条路由规定,是由 Kubernetes 中对应的 ingress 和 service 所定义的。整个拜访链路能够演绎为下图:

开启 对外服务 开关,相当于主动生成了以下资源:

apiVersion: v1
kind: Service
metadata:
  labels:
    creator: Rainbond
    event_id: ""
    name: gr49d848ServiceOUT
    port_protocol: http
    protocol: http
    rainbond.com/tolerate-unready-endpoints: "true"
    service_alias: gr49d848
    service_port: "5000"
    service_type: outer
    tenant_name: 2c9v614j
  name: service-8965-5000out
  namespace: 3be96e95700a480c9b37c6ef5daf3566
spec:
  clusterIP: 172.21.7.172
  ports:
  - name: tcp-5000
    port: 5000
    protocol: TCP
    targetPort: 5000
  selector:
    name: gr49d848
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}
  
---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/weight: "100"
  generation: 1
  labels:
    creator: Rainbond
    service_alias: gr49d848
    tenant_name: 2c9v614j
  name: 3cf8d6bd89250eda87ac127c49694a05
  namespace: 3be96e95700a480c9b37c6ef5daf3566
spec:
  rules:
  - host: 5000.gr49d848.2c9v614j.17a4cc.grapps.cn
    http:
      paths:
      - backend:
          serviceName: service-8965-5000out
          servicePort: 5000
        path: /
status:
  loadBalancer: {}

主动生成域名

对于大多数开发者而言,域名算是一种稀缺资源,如何为本人茫茫多的 Ingress rule 调配域名,是一件很令人头疼的事件。毕竟只有领有了本人的域名时,才可能彻底掌控其解析的规定,防止无止境的批改 /etc/hosts 文件。

市面上绝大多数 Kubernetes 管理工具都能够用半自动的形式生成 Service 与 Ingress 资源。这种半自动的形式特指让用户在图形化 UI 界面上,输出必要的信息后,由管理工具自行生成对应的 yaml 配置文件,并加载到 Kubernetes 中去。然而对于所配置的域名,鲜有工具能够做到如 Rainbond 一样的应用体验。

达成这一优良体验的关键在于泛解析域名的应用。

对泛解析域名最简单明了的解释就是:合乎 *.mydomain.com 这一规定的任意域名,都能够解析到同一个 IP 地址下来。在当下这一应用场景中,咱们只须要将泛解析域名 *.17a4cc.grapps.cn 解析到 rbd-gateway 所在的服务器 IP 地址,就能够随便为 Ingress rule 配置合乎规定的域名了。

Rainbond 在产品设计层面将 Ingress rule 和泛解析域名联合在了一起,主动为每个服务端口生成全局惟一的域名。并在集群装置时,主动向公网 DNS 服务器注册了解析记录,集群装置结束之后,所生成的所有域名,都是能够被公网解析的,只有 PC 客户端能够应用公网 DNS 服务,就能够解析域名,并拜访到指定的服务端口。

Rainbond 通过不同的三级域名(比方以后场景中的 17a4cc)来辨别不同的集群。这里波及到对于泛解析域名的一个特点,子级域名的解析记录,优先级高于父级域名的解析记录。

===========================================
// 对两级泛解析域名注册解析记录
*.grapps.cn           = 解析记录注册 => 1.1.1.1
*.17a4cc.grapps.cn    = 解析记录注册 => 2.2.2.2
===========================================
===========================================
// 客户端解析后果
abc.grapps.cn         = 解析 IP 地址 => 1.1.1.1
abc.def.grapps.cn     = 解析 IP 地址 => 1.1.1.1
abc.17a4cc.grapps.cn  = 解析 IP 地址 => 2.2.2.2     // 优先应用 *.17a4cc.grapps.cn 的解析记录 

Rainbond 是一个开源的云原生利用治理平台,应用简略,不须要懂容器和 Kubernetes,反对治理多个 Kubernetes 集群,提供企业级利用的全生命周期治理,性能包含利用开发环境、利用市场、微服务架构、利用继续交付、利用运维、利用级多云治理等。

Github:https://github.com/goodrain/r…

官网:https://www.rainbond.com?chan…

微信群:请搜寻增加群助手微信号 wylhzmyj

钉钉群:请搜寻钉钉群号 31096419

正文完
 0