第七章 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就是这种) 胖客户端模式(最好用 ...
随机推荐
- egg.js源码解析之render()
作为阿里的开源node.js框架,我觉得egg.js是很有前途的,故而学之,github上down了一个项目下来(https://github.com/easy-team/egg-vue-webpac ...
- Python中基本的读文件和简单数据处理
Python中基本的读文件和简单数据处理 暂无评论 DataQuest上面的免费课程(本文是Python基础课程部分),里面有些很基础的东西(csv文件读,字符串预处理等),发在这里做记录.涉及下面六 ...
- Java 保存对象到文件并恢复 ObjectOutputStream/ObjectInputStream
1.从inputFile文件中获取内容,读入到set对象: 2.然后通过ObjectOutputStream将该对象保存到outputFile文件中: 3.最后通过ObjectInputStream从 ...
- Swift 开源项目精选
Swift 开源项目精选 站在个人的角度,并基于<Swift 语言指南>,针对开源项目做了一个甄别.筛选.当然,由于个人能力及涉足范围所限,还远远不够,其中肯定有偏颇及不足,还望同学们多多 ...
- BZOJ5298 CQOI2018 交错序列 【DP+矩阵快速幂优化】*
BZOJ5298 CQOI2018 交错序列 [DP+矩阵快速幂优化] Description 我们称一个仅由0.1构成的序列为"交错序列",当且仅当序列中没有相邻的1(可以有相邻 ...
- js去重复和取重复数据
js数组中取重复数据的方法: 方法一:去重复数据 <script> Array.prototype.distinct=function(){ var a=[],b=[]; for(var ...
- Roslyn 语法树中的各种语法节点及每个节点的含义
使用 Roslyn 进行源码分析时,我们会对很多不同种类的语法节点进行分析.如果能够一次性了解到各种不同种类的语法节点,并明白其含义和结构,那么在源码分析的过程中将会更加得心应手. 本文将介绍 Ros ...
- vector 介绍
介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通 ...
- MySQL性能管理及架构设计 --- 理论篇
MySQL性能管理及架构设计 一丶IO,内存,吞吐量理解 IO 是指设备与设备之间操作次数,比如mysql与php互插内存 是程序运行都在里面执行吞吐量 是单 ...
- static类和no static类的区别
1.static类,只能有静态成员,不能被实例.静态的东西在内存中只有一份,调用速度会快,但是相对费内存. 2.在另外一个类内部定义的类,此类的实例化不希望依赖外部类的实例化,此时可以定义为静态类(即 ...