第七章 HTTP流量管理(一) gateway
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,但不适用于同一个域。
第七章 HTTP流量管理(一) gateway的更多相关文章
- 第七章 HTTP流量管理(二) URL 重写
URL 重定向功能: 浏览器中输入 http://<host_name>:31380/v1/service-A/XXXX 经过下面的重定向,实际调用的是serviceA的/v1/XXXX ...
- 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- Java语言程序设计(基础篇) 第七章 一维数组
第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...
- objective-c第七章课后练习2
题:改变第七章例子中print方法,增加bool参数,判断如果是YES则对分数进行约简 @interface Fraction : NSObject { //int num,den; } @prope ...
- 读《编写可维护的JavaScript》第七章总结
第七章 事件处理 7.1 典型用法 作者首先给了个我们一个处理事件的方法.看起来也没啥俩样,不过后来给出的优化方法很值得学习: // 不好的写法 function handleClick(even ...
- 第七章 LED将为我们闪烁:控制发光二极管
第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...
- Getting Started With Hazelcast 读书笔记(第七章)
第七章 部署策略 Hazelcast具有适应性,能根据不同的架构和应用进行特定的部署配置,每个应用可以根据具体情况选择最优的配置: 数据与应用紧密结合的模式(重点,of就是这种) 胖客户端模式(最好用 ...
随机推荐
- weblogic、hibernate 包冲突
解决办法: 在weblogic 配置 [paths]项中 添加antlr-2.7.7.jar,该jar包应该位于引用weblogic.jar之前,使启动时不再加载weblogic中的低版本的antl ...
- c++多线程在异常环境下的等待
c++11开始支持多线程编程,相关的类和函数封装在标准库头文件<thread>中,而c++多线程编程很重要的一点就是当用户创建一个std::thread对象,关联了可调用对象后,需要在该t ...
- Okhttp之CacheInterceptor简单分析
<OkHttp之BridgeInterceptor简单分析 >简单分析了BridgeInterceptor的工作原理,在Okhttp的拦截器链上BridgeInterceptor的下一个拦 ...
- postgresql的now()与Oracle的sysdate
postgresql的now()为当前事务开始时间, 而Oracle的sysdate是当前时间. 区别在于事务. postgresql中的now(): postgres=# begin ; BEGIN ...
- hexo部署Github博客
例子:https://aquarius1993.github.io/blog/ 仓库:https://github.com/Aquarius1993/blog (前提是已经安装Xcode和git) 1 ...
- 汇编语言---键盘KeyCode值列表
键盘KeyCode值列表 收藏 keycode 0 =keycode 1 =keycode 2 =keycode 3 =keycode 4 =keycode 5 =keycod ...
- I.MX6 linux tslib Corrupt calibration data
I.MX6 linux tslib Corrupt calibration data 一.tslib出错 Corrupt calibration data 二.解决方法: ...... if [ -f ...
- BZOJ1059 ZJOI2007 矩阵游戏 【二分图匹配】
BZOJ1059 ZJOI2007 矩阵游戏 Description 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏--矩阵游戏.矩阵游戏在一个N*N黑白方阵进行(如同国际象棋一 ...
- ssh/scp免密码登录传输
# 本地服务器生成key(直接回车默认) ssh-keygen # 将key传输到要登录的服务器 ssh-copy-id -i /root/.ssh/id_rsa.pub root@IP地址 # 输入 ...
- iphone——日期处理
http://blog.csdn.net/lingedeng/article/details/6996599 Dates NSDate类提供了创建date,比较date以及计算两个date之间间隔的功 ...