k8s ingress、istio网关

本文探讨了Kubernetes的Ingress组件与Istio Gateway在负载均衡、路由规则和架构应用上的区别,重点比较了两者如何实现服务网格中的统一入口和高级路由控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

k8s ingress在这里插入图片描述

在这里插入图片描述

ingress 三大组件
1负载均衡器

nginx,Haproxy之类的

2ingress controller

ngress Controller实质上可以理解为是个监视器,Ingress Controller通过不断地跟Kubernetes API打交道,实时的感知后端Service、Pod等变化,然后更新反向代理负载均衡器。

3ingress

配置文件,哪个域名对应哪个服务。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nginx-test-ingress   # ingress 名称
  namespace: default        # 命名空间

spec:
  rules:
  # 域名
  - host: k8s.nginx.com
    http:
      paths:
      - path: /
        backend:
          # 后端service
          serviceName: nginx-service
          # service 端口
          servicePort: 80
总结

在边缘放置一个nginx,然后弄一个监视器叫ingress controller时时刻刻监视着k8s里service、pod变化,当我们想让foo.bar.com/foo请求转发到foo服务,我们需要写一个映射关系,这个映射关系就是ingress,然后ingress controller 根据 ingress 和 service、pod生成nginx配置,然后更新反响代理服务器。

istio 网关

在这里插入图片描述

IngressGateway

Istio IngressGateway 的功能与 Kubernetes Ingress 类似,IngressGateway 部署是一个基于 Envoy 代理的封装,也是类似nginx

Gateway

Gateway 资源是用于配置 IngressGateway 的一种 Kubernetes 的自定义资源,Istio Gateway资源本身只能配置L4-L6的功能,例如暴露的端口,TLS设置等。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "httpbin.example.com"
VirtualService

Gateway 可与 VirtualService 绑定,在 VirtualService 中可以配置七层路由规则,例如按比例和版本的流量路由,故障注入,HTTP 重定向,HTTP 重写等所有 Mesh 内部支持的路由规则。

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
  - "httpbin.example.com"
  gateways:
  - httpbin-gateway
  http:
  - match:
    - uri:
        prefix: /status
    route:
    - destination:
        port:
          number: 8000
        host: httpbin
总结

Istio IngressGateway 属于 8s ingress的加强版,可以指定复杂的流量路由规则,如流量拆分或流量镜像等,而且将l4-l6与l7解耦,而且可以从控制平面进行配置。

架构方案

虽然Ingress Controller通过七层网关为后端的多个Service提供了统一的入口,但由于其部署在集群中,因此并不能直接对外提供服务。实际上Ingress需要配合NodePort和LoadBalancer才能提供对外的流量入口,如下图所示:
在这里插入图片描述
istio 入口网关前面也要有一个负载均衡,比如80端口的请求代理到网关A,60端口的请求代理到网关B。
在这里插入图片描述
因此,我们需要在k8s集群前再放置一个负载均衡器,例如loadbalancer,对于没有loadbalancer的我们可以用搭一个负载均衡集群保证集群的高可用。

在这里插入图片描述

在这里插入图片描述

参考:
https://cloudnative.to/blog/how-to-pick-gateway-for-service-mesh/
https://mp.weixin.qq.com/s/Dt4ge1H4JXhHS91vRMBUWA
https://zhuanlan.zhihu.com/p/142380204?utm_source=wechat_session&utm_medium=social&utm_oi=675340860045004800&wechatShare=1&s_r=0
https://mp.weixin.qq.com/s/fPjwSqIt4rvHcnK-LNjTDw

### 如何在 Kubernetes 中部署 Istio Gateway #### 准备工作 为了成功部署 Istio Gateway,在集群中安装并配置好 Istio 是必要的。这通常涉及通过 Helm 或者其他方式来设置 Istio 控制平面组件。 #### 创建网关资源定义 Istio 的 `Gateway` 资源允许管理员配置负载均衡器,这些负载均衡器公开 HTTP/TCP 端口给外部流量访问应用服务。下面是一个简单的 YAML 文件例子,用来描述一个名为 `httpbin-gateway` 的网关对象[^3]: ```yaml apiVersion: networking.istio.io/v1alpha3 kind: Gateway metadata: name: httpbin-gateway spec: selector: istio: ingressgateway # 使用默认的 Ingress Gateway 部署 servers: - port: number: 80 name: http protocol: HTTP hosts: - "httpbin.example.com" ``` 此配置指定了要监听第 80 号端口上的 HTTP 流量,并将其路由至特定主机名的服务请求。 #### 应用网关资源配置 一旦编写好了上述 YAML 文件(假设保存为 `httpbin-gateway.yaml`),就可以利用 `kubectl apply` 命令提交到 Kubernetes API Server 来创建对应的网关实例: ```bash kubectl apply -f httpbin-gateway.yaml ``` #### 设置虚拟服务规则 为了让进入网关的流量能够被正确转发到目标 Pod 上面,还需要额外定义 VirtualService 对象来指定具体的路径匹配逻辑以及目的地详情。这里给出一段示范性的代码片段作为参考[^4]: ```yaml apiVersion: networking.istio.io/v1alpha3 kind: VirtualService metadata: name: httpbin spec: hosts: - "httpbin.example.com" gateways: - httpbin-gateway http: - match: - uri: exact: /status/200 route: - destination: host: svc3.svc.cluster.local port: number: 80 ``` 这段配置使得当有客户端尝试连接带有 `/status/200` URL 参数的目标站点时,实际会由名称空间内的 `svc3` 这个服务处理响应任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值