java系统找不到指定文件怎么解决
232
2022-10-07
无缝融入 Kubernetes 生态 | 云原生网关支持 Ingress 资源
Kubernetes Ingress 介绍
通常情况下,Kubernetes 集群内的网络环境与外部是隔离的,也就是说 Kubernetes 集群外部的客户端无法直接访问到集群内部的服务,这属于不同网络域如何连接的问题。解决跨网络域访问的常规做法是为目标集群引入一个入口点,所有外部请求目标集群的流量必须访问这个入口点,然后由入口点将外部请求转发至目标节点。同样,Kubernetes 社区也是通过增设入口点的方案来解决集群内部服务如何对外暴露的问题。Kubernetes 一贯的作风是通过定义标准来解决同一类问题,在解决集群对外流量管理的问题也不例外。Kubernetes 对集群入口点进行了进一步的统一抽象,提出了 3 种解决方案:NodePort、LoadBalancer 和 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 处理外部请求,其流程图如下:
MSE Ingress Controller(MSE 云原生网关)
通过 MSE 云原生网关解析 Ingress
我们将基于 MSE 云原生网关和阿里云 ACK 产品进行实践,由云原生网关解析并执行 ACK 集群中定义的 Ingress 资源,完成对外暴露 ACK 集群中指定服务。
前提条件
• 已拥有一个 MSE 云原生网关• 已拥有一个 ACK 运维集群
步骤一:关联 ACK 集群并配置监听 Ingress
在 MSE 云原生网关控制台->服务管理->来源管理中,关联对应的 ACK 集群,开启监听 Kubernetes Ingress 配置,并配置 IngressClass 和监听的目标命名空间。
步骤二:部署服务
创建并拷贝以下内容到 文件中,用于部署名称为 Deployment,以及名称为 的 Service,然后应用到 ACK 集群中。
apiVersion: v1kind: Servicemetadata: name: labels: app: service: ports: - name: port: 8000 targetPort: 80 selector: app: apps/v1kind: Deploymentmetadata: name: replicas: 1 selector: matchLabels: app: template: metadata: labels: app: spec: containers: - image: mse-gw-demo-registry.cn-hangzhou.cr.aliyuncs.com/gw/ imagePullPolicy: IfNotPresent name: ports: - containerPort: 80
步骤三:配置 Ingress
创建并拷贝以下内容到 ingress.yaml 中,然后应用到 ACK 集群中。
ACK 1.19 版本之前
apiVersion: networking.k8s.io/v1beta1kind: Ingressmetadata: name: ingress-demospec: rules: - host: test.com paths: - path: /ip backend: serviceName: servicePort: 800ACK 1.19 及之后版本apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: ingress-demospec: rules: - host: test.com paths: - path: /ip backend: service: name: port: number: 8000 pathType: Exact
步骤四:访问服务
在 MSE 云原生网关控制台的基本信息查看网关 IP 地址。
通过以下命令行测试访问服务。
curl -H "host: test.com" 47.97.127.61/ip
预期结果:
{ "origin": "x.x.x.x"}
步骤五:查看域名、路由相关配置
我们可以在 MSE 云原生网关控制台查看已监听的域名和路由相关的配置,例如,上述 ingress.yaml 在云原生网关控制台的解析结果。域名管理如下:
路由管理如下:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~