Kubernetes Ingress 介绍

通常情况下,Kubernetes 集群内的网络环境与外部是隔离的,也就是说 Kubernetes 集群外部的客户端无法直接拜访到集群内部的服务,这归于不同网络域怎么连接的问题。处理跨网络域拜访的惯例做法是为方针集群引进一个进口点,一切外部恳求方针集群的流量有必要拜访这个进口点,然后由进口点将外部恳求转发至方针节点。

相同,Kubernetes 社区也是经过增设进口点的计划来处理集群内部服务怎么对外露出的问题。Kubernetes 一贯的作风是经过界说标准来处理同一类问题,在处理集群对外流量办理的问题也不破例。Kubernetes 对集群进口点进行了进一步的统一抽象,提出了 3 种处理计划:NodePort、LoadBalancer 和 Ingress。下图是这三种计划的对比:

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

经过以上对比,咱们能够发现,NodePort 和 LoadBalancer 主要作业在四层流量上,只能用于露出集群中一个服务。当集群中对外露出的服务数量增多时,NodePort 计划最终会因端口耗尽而无法露出更多的服务,而 LoadBalancer 计划则会引进同等数量的 SLB,在添加本钱的一起也给运维带来一定的担负。定位在七层流量上的 Ingress 计划能够经过界说根据虚拟主机域和路径的路由规矩来完成对集群中服务的代理,Ingress 与后端服务是一对多的关系,有用的降低了机器本钱。

此外,因为外部拜访集群中服务的一切进口流量都先经过同享的 Ingress Provider 节点,所以集群办理者能够在 Ingress Provider 中额定实施拜访操控策略来确保集群中服务的安全性和稳定性,并且能够经过采集监控指标、记载拜访日志以及敞开链路追踪来增强可观测建造。因此,现在 Ingress 计划是主流的选择。

Kubernetes Ingress Provider 介绍

上文提到,Ingress 是 Kubernetes 应对集群办理外部拜访流量的场景抽象出来一个资源对象,用来描绘集群外部怎么拜访集群内部服务的方法。经过 Ingress 资源来装备不同的转发规矩,然后到达根据不同的规矩设置外部拜访集群内不同的 Service 所对应的后端 Pod。Ingress Provider 是真实存在的 Workload 节点,是真实意义上 Ingress 规矩的完成者与履行者。Kubernetes 提出 Ingress 的标准,将 Ingress 详细完成方法交给各种 Provider 以及云供给商,有用确保了 Ingress 不会被详细的 Provider 或者云厂商绑定,契合 Kubernetes 一向秉承的敞开、标准的思维。

在云原生技能浪潮下,Ingress Provider 产品品种如雨后春笋般涌现,其中用户知名度最高当属 Kubernetes Nginx Ingress。接下来会简略介绍一下 Nginx Ingress Controller 和阿里云推出的下一代网关——MSE Ingress Controller(MSE 云原生网关)。

Nginx Ingress Controller

Nginx Ingress Controller 是由 Kubernetes 官方保护的,内部由 Controller 和数据面 Nginx 组成。Nginx Ingress Controller 由用户布置在 Kubernetes 集群中,经过拜访集群的 API Server 来实时监听用户使用到集群中的 Ingress 资源,经 Controller 解析并转化为 Nginx 装备文件(nginx.conf),然后经过 reload 数据面 Nginx 的方法使得装备收效。

当外部恳求拜访集群进口点 Nginx Ingress Controller 时,匹配 Nginx Ingress 转发规矩的流量转发到后端 Service 所对应的 Pod,由 Pod 处理外部恳求,其流程图如下:

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

MSE Ingress Controller(MSE 云原生网关)

随着云原生技能持续演进,云原生使用微服务化不断深入,Nginx Ingress 在面临复杂路由规矩装备、支撑多种使用层协议(Dubbo 和 QUIC 等)、服务拜访的安全性以及流量的可观测性等问题上略显疲惫。

为了处理用户对大规模流量办理的激烈诉求,MSE 云原生网关应运而生,这是阿里云推出的兼容标准 Ingress 标准的下一代网关,具备低本钱、安全、高集成和高可用的产品优势。将传统的流量网关和微服务网关合并,在降低 50%资源本钱的一起为用户供给了精细化的流量办理能力,支撑 ACK 容器服务、Nacos、Eureka、固定地址、FaaS 等多种服务发现方法,支撑多种认证登录方法快速构建安全防线,供给全方面、多视角的监控系统,如指标监控、日志剖析以及链路追踪,并且支撑解析单、多 Kubernetes 集群形式下的标准 Ingress 资源,满足云原生使用场景下以声明式进行统一流量办理的诉求。

MSE Ingress Controller 经过 List-Watch 机制获取相关的 ACK 集群中 Ingress 资源的变化,然后以热更新的方法动态更新 MSE 云原生网关的路由规矩。当 MSE 云原生网关收到恳求时,匹配 Ingress 转发规矩转发恳求到后端 Service 所对应的 Pod。

相比 Nginx Ingress Controller,首先 MSE Ingress Controller 是以热更新的方法秒级收效监听到的 Ingress 资源,这种无需重启数据面即可收效装备的方法大大提高了集群进口网关的稳定性,有用保证了业务流量无损。更重要的是,MSE Ingress Controller 能够进行多集群办理,即一起作为多个集群的进口网关,意味着能够一起监听多个集群中的 Ingress 资源,处理用户跨 Kubernetes 集群流量调度和流量办理问题。

下图是 MSE Ingress Controller 在多 ACK 集群形式下 Ingress 的使用场景。

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

经过 MSE 云原生网关解析 Ingress

咱们将根据 MSE 云原生网关和阿里云 ACK 产品进行实践,由云原生网关解析并履行 ACK 集群中界说的 Ingress 资源,完成对外露出 ACK 集群中指定服务。

前提条件 • 已拥有一个 MSE 云原生网关 • 已拥有一个 ACK 运维集群

过程一:相关 ACK 集群并装备监听 Ingress

  1. 在 MSE 云原生网关操控台->服务办理->来源办理中,相关对应的 ACK 集群,敞开监听 Kubernetes Ingress 装备,并装备 IngressClass 和监听的方针命名空间。
    无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

过程二:布置服务

创立并复制以下内容到 httpbin.yaml 文件中,用于布置名称为 httpbin Deployment,以及名称为 httpbin 的 Service,然后使用到 ACK 集群中。

apiVersion: v1
kind: Service
metadata:
  name: httpbin
  labels:
    app: httpbin
    service: httpbin
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 80
  selector:
    app: httpbin
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
  template:
    metadata:
      labels:
        app: httpbin
    spec:
      containers:
      - image: mse-gw-demo-registry.cn-hangzhou.cr.aliyuncs.com/gw/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        ports:
        - containerPort: 80

过程三:装备 Ingress

创立并复制以下内容到 ingress.yaml 中,然后使用到 ACK 集群中。

ACK 1.19 版别之前

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  rules:
  - host: test.com
    http:
        paths:
        - path: /ip
          backend:
            serviceName: httpbin
            servicePort: 800
ACK 1.19 及之后版别
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  rules:
  - host: test.com
    http:
        paths:
        - path: /ip
          backend:
            service:
              name: httpbin
              port:
                number: 8000
          pathType: Exact

过程四:拜访服务

在 MSE 云原生网关操控台的基本信息检查网关 IP 地址。

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

经过以下命令行测验拜访服务。

curl -H "host: test.com" 47.97.127.61/ip

预期结果:

{
  "origin": "x.x.x.x"
}

过程五:检查域名、路由相关装备

咱们能够在 MSE 云原生网关操控台检查已监听的域名和路由相关的装备,例如,上述 ingress.yaml 在云原生网关操控台的解析结果。

域名办理如下:

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

路由办理如下:

无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源

发布云原生技能最新资讯、汇集云原生技能最全内容,定时举行云原生活动、直播,阿里产品及用户最佳实践发布。与你并肩探索云原生技能点滴,分享你需求的云原生内容。

关注【阿里巴巴云原生】大众号,获取更多云原生实时资讯!