Gateway: istio的一种资源类型,Istio Gateway告诉k8s的istio-ingressgateway pods可以打开哪些主机和端口(如下的80是 ingressgateway pod容器中的端口)

gateway是定义了哪些的hosts可以到达ingress pod。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: galaxygateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number:
name: http
protocol: HTTP
hosts:
- "*"

(A)  selector:

     istio: ingressgateway   , 这个label是在ingressgateway的pod中定义的。 用如下命令可以查到

(B)  如下的port 80, 不是指主机的端口,而是ingressgateway 的pod中容器的80端口。

servers:
- port:
number: 80
name: http
protocol: HTTP

(C) hosts:

             "*"

这就在Istio的ingress网关上开辟了一个端口,但是只是接受访问和流量输入,当流量到达这个网关时,它还不知道发送到哪里去。

现在我们的网关已准备好接收流量,我们必须告知它将收到的流量发往何处,Istio使用名为“VirtualService”类型配置流量发往何处。
将一个网关列表配置给VirtualService,然后Istio使用VirtualService配置中定义的路由再配置那些网关.

URI路径前缀匹配/env的将发往指定目标.(注意: 如果有多个virtualservice文件,后面的会覆盖前面的,所以要把所有的路由信息都配置到一个virtualservice)

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: flaskapp
spec:
hosts:
- "*"
gateways:
- galaxygateway
http:
- match:
- uri:
prefix: /env
route:
- destination:
host: flaskapp.default.svc.cluster.local # 服务的全限量名称 格式是 服务名.namespace 名称.svc.cluster.local
port:
number: 80 # 服务对外暴露的端口。
 (A)gateways:
- galaxygateway
注意: 这里Virtualservice配置的规则针对galaxygateway其作用,而其属于网格外部的流量,对于网格内部流量不起作用,如果也想对网格内部的流量也其作用,这里需要把
      mesh也加上。

(B) “*”

如果:A:external-IP有值,说明环境中配置了负载均衡器,可以供ingress gateway使用。

B: external-IP的值是none 或者pending,说明环境汇中没有负载均衡器,这种情况如果想直接访问gateway,就需要使用服务的node  port

Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress

$ export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].nodePort}')
$ export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')

NodePort 是31380,这个值可以改,但是范围只能是30000 - 32767。

If routing to your application is required to run on 443/80, your Kubernetes cluster must have an external load balancer deployed.
If one is not present, the traffic will be routed to the ingress node port.

如果你的引用需要在443/80端口上跑,那么k8s集群必须有外部的负载均衡器,或者要使用node port。

如何从外部访问呢:

  http://XXXXXXXXXXXXX.com:31380/env/version    ()

  curl 9.42.18.65:31380/env/version           用IP地址:port的方式访问,从这个来看,相当于L4的负载均衡器。

  
  curl -I -H Host:<域名>.com http://9.42.18.65:31380/env/version    # 在header里加上Host 伪装成gateway需要的HOSTS

http://9.42.18.65:31380/env/version       # 必须指定ingress service 对外暴露的端口 31380

总结:

我上面的例子中,gateway 可以把指定的URL 告诉 ingress pod处理。 virtualservice对指定URL进行 service 调用

1. Gateway: Istio Gateway是负责打开k8s上相关Istio的pods(pod!pod!pod!)上的端口并接收主机的流量,是接收流量与路由之间的关键链接。

2. VirtualService: Istio VirtualService是“附加”到Gateway上的,并负责定义Gateway应实现的路由。可以将多个VirtualServices连接到Gateway,但不适用于同一个域。

最新文章

  1. .NET Core的文件系统[2]:FileProvider是个什么东西?
  2. java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决
  3. 描述一下C#中索引器的实现过程,是否只能根据数字进行索引?
  4. Linux关于vm虚拟机复制后无法启动网卡
  5. 如何通过linux ssh远程linux不用输入密码登入
  6. 《HeadFirst设计模式》读后感——对学习设计模式的一些想法
  7. 3.SQLAlchemy文档-SQLAlchemy Core(中文版)
  8. ios-指纹识别
  9. 32.怎样在Swift中实现TabBar和导航视图结合的项目?
  10. [转贴]JAVA 百度地图SDK地图学习——实现定位功能
  11. Scroll View 深入
  12. 分布式进阶(八)Linux提示Unable to locate package该如何处理?
  13. 星星闪烁+多边形移动 canvas
  14. vue优势
  15. JavaScript学习总结(三、函数声明和表达式、this、闭包和引用、arguments对象、函数间传递参数)
  16. Tether USDT 节点钱包的安装与使用-omni layer
  17. PHP:第二章——PHP中的while语句
  18. mysql 1292-Truncated incorrect double value
  19. git code 初次上传
  20. Controller层@PathVariable使用

热门文章

  1. DataTable和实体类通过反射相互转换
  2. 制作smarty模版缓存文件
  3. 主题模型︱几款新主题模型——SentenceLDA、CopulaLDA、TWE简析与实现
  4. MPAndroidChart Wiki(译文)~Part 1
  5. rabbitmq安装部署
  6. 【剑指offer】二叉树的子结构,C++实现(递归)
  7. BZOJ4550: 小奇的博弈(NIMK博弈&amp; 组合数&amp; DP)
  8. cv.Mat 与 .txt 文件数据的读写操作
  9. My Test about Mat
  10. [BZOJ4061][Cerc2012]Farm and factory