首页 > 其他分享 >Ingress和Egress

Ingress和Egress

时间:2023-01-18 19:12:02浏览次数:42  
标签:Ingress 服务 Istio 访问 Egress httpbin Gateway

Istio Gateway

Istio 采用了一种新的模型——Istio Gateway 来代替 Kubernetes 中的 Ingress 资源类型。Gateway 允许外部流量访问内部服务,只需要配置流量转发即可。

创建 Istio Gateway,注意:这里设置了 hosts 为 httpbin.example.com,也就是只有 host 为httpbin.example.com 才能正确访问 httpbin 的服务:

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: httpbin-gateway
spec:
  selector:
    istio: ingressgateway #use Istio default gateway implementation
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "httpbin.example.com"
EOF

将 httpbin 服务暴露给 Istio Gateway,其中 destination 中的 host 字段为 Istio Service 配置中的服务名,Envoy 会通过服务发现的方式将流量路由到 httpbin 对应的 Pod IP:

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

通过 cURL 访问特定的 URL Path 就可以访问该服务了,这里需要注意的是:需要设置 host 为 httpbin.example.com。因为在前面的 Gateway 配置中,绑定了 host,当然也可以通过修改 /etc/hosts 来绑定域名为本地地址:

curl -I -HHost:httpbin.example.com http://127.0.0.1/status/200
HTTP/1.1 200 OK
server: istio-envoy
date: Mon, 08 Feb 2021 04:42:54 GMT
content-type: text/html; charset=utf-8
access-control-allow-origin: *
access-control-allow-credentials: true
content-length: 0
x-envoy-upstream-service-time: 327

Istio 的外部访问方式——Gateway 资源类型利用 Envoy 的强大功能,可以实现路由层丰富的配置。这些功能和网格内部提供的功能、配置方式一样,包括熔断、丰富的负载均衡策略、服务发现、金丝雀发布等,通过服务发现的方式你也可以解决 Kubernetes Ingress 四层路由的缺陷

Egress 出口流量

Egress 出口流量是云原生引入的新的设计模式和架构,在传统的 Web 架构中,很少有出口网关的概念。通过 Egress 架构的学习,可以拓展我们在微服务治理中的思维方式,在学习 Egress 过程中,我也会讲到如何通过 Egress 架构赋能传统微服务架构。

Kubernetes 中的 Egress

相较于 Kubernetes 中 Ingress 的强大功能,Kubernetes 中的 Egress 就显得比较弱了,Kubernetes 的 Egress 并没有引入像 Nginx 这样的七层负载均衡器,只是在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量

Istio Egress

Istio Egress 和 Kubernetes 中的 Egress 不同,Istio的 Egress 本质上是一个 Envoy Proxy,通过 Envoy 强大的七层代理功能,提供丰富的路由策略,而不局限于简单的四层网络 IP 端口黑白名单的配置。

每个服务的本地 Proxy 可以通过连接到 Egress Gateway 访问外部服务,达到精准的安全策略控制。

 

创建一个 ServiceEntry,允许流量直接访问一个外部服务:

kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: cnn
spec:
  hosts:
  - edition.cnn.com
  ports:
  - number: 80
    name: http-port
    protocol: HTTP
  - number: 443
    name: https
    protocol: HTTPS
  resolution: DNS
EOF

为 edition.cnn.com 端口 80 创建 Egress Gateway,并为指向 Egress Gateway 的流量创建一个 Destination Rule:

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: istio-egressgateway
spec:
  selector:
    istio: egressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - edition.cnn.com
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: egressgateway-for-cnn
spec:
  host: istio-egressgateway.istio-system.svc.cluster.local
  subsets:
  - name: cnn
EOF

定义一个 VirtualService,将流量从 Sidecar 引导至 Egress Gateway,再从 Egress Gateway 引导至外部服务:

$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: direct-cnn-through-egress-gateway
spec:
  hosts:
  - edition.cnn.com
  gateways:
  - istio-egressgateway
  - mesh
  http:
  - match:
    - gateways:
      - mesh
      port: 80
    route:
    - destination:
        host: istio-egressgateway.istio-system.svc.cluster.local
        subset: cnn
        port:
          number: 80
      weight: 100
  - match:
    - gateways:
      - istio-egressgateway
      port: 80
    route:
    - destination:
        host: edition.cnn.com
        port:
          number: 80
      weight: 100
EOF

通过 Egress Gateway 可以对外部流量进行权限控制和精准的路由匹配访问

将所有外部第三方服务的访问流量都转发到 Egress Gateway,经由 Egress Gateway 访问出去,通过这样的方式可以大大降低外部服务访问的延时,维持 HTTP 的 KeepAlive 长连接。因为如果服务的机器数量过多,访问外部频率又不是很高,与外部服务的连接就很容易断掉,不得不重新建连,而现在大多数外部服务都是 HTTPS 的,需要消耗过多的 SSL 握手时间。

 

标签:Ingress,服务,Istio,访问,Egress,httpbin,Gateway
From: https://www.cnblogs.com/muzinan110/p/17060420.html

相关文章

  • Logistic Regression逻辑斯蒂回归
    ​​WelcomeToMyBlog​​LogisticRegressionlogistic回归是统计学习中的经典分类方法,他属于对数线性模型,logistic回归来源于logistic分布,先从logistic分布说起Logis......
  • 每天一点基础K8S--使用基础ingress进行灰度发布
    利用ingress实现灰度发布1、背景ingress可以实现七层负载,可以根据请求header不同将流量代理到后端不同的service服务。比如:后端网站进行了更新,为了不全网更换,可以利用i......
  • kubernetes安装ingress-nginx的步骤
    kubernetes安装ingress-nginx的步骤系统版本:CentOs8.1k8s版本:v1.21.3containerd版本:ctrcontainerd.io1.4.3一:准备yaml文件github仓库地址:wgethttps://raw.githubuse......
  • kubernetes v1.24.0安装ingress
    环境kubernetesv1.24.0ingress:controller:v1.1.2Ingress-nginx官网https://kubernetes.github.io/ingress-nginx/获取deploy.yaml文件kubectlapply-fhttps://r......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • 从 Nginx Ingress 窥探云原生网关选型
    现今有越来越多的企业开始采纳云原生理念进行应用架构转型。而K8s和微服务是云原生的两大支柱,随着云原生浪潮而被广泛应用。 对多数应用而言,提供对外服务的使命并不......
  • ingress获取客户端真实IP配置记录
    一,背景需要日志展示真实客户端地址二,功能实现步骤1,配置ingress-nginx的configmapcompute-full-forwarded-for:'true'forwarded-for-header:X-Forwarded-For2,修改in......
  • 每天一点基础K8S--K8S中的ingress和ingress controller
    ingress和ingresscontroller1、背景#通过service的nodeport和clusterIP可以将后端pod服务进行代理和负载。但该代理为四层应用,即对IP和port进行代理。#根据之前的学......
  • 时间序列分析 Tsfresh 基于统计学的时间序列分析方法 3、差分整合移动平均自回归模型(A
    原文链接:点这里在了解了AR和MA模型后,我们将进一步学习结合了这两者的ARIMA模型,ARIMA在时间序列数据分析中有着非常重要的地位。但在这之前,让我们先来看ARIMA的简化版ARMA......