第七章 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就是这种) 胖客户端模式(最好用 ...
随机推荐
- Alpha冲刺(2/10)
前言 队名:拖鞋旅游队 组长博客:https://www.cnblogs.com/Sulumer/p/9960487.html 作业博客:https://edu.cnblogs.com/campus/ ...
- diff和patch 打补丁
在Linux环境下,有两个工具用来给project打补丁,即diff和patch diff diff具有比较功能.可以使用man命令查看其使用方法. NAME diff ...
- ADO Recordset 对象链接
http://baike.baidu.com/link?url=4Xdc46R8M5uj-BbOGaH761N5oDEYlGQJFeR2WbPwx1iQBusAUKU3qbWcHZCMmayatj9n ...
- 概念:GNU构建系统和Autotool
经常使用Linux的开发人员或者运维人员,可能对configure->make->make install相当熟悉.事实上,这叫GNU构建系统,利用脚本和make程序在特定平台上构建软件. ...
- .pyc和.pyo文件有何用
百度知道:http://zhidao.baidu.com/link?url=_tFP1xglFnoEBObWtIArI3b3Ft0PQowx5m5ruIaX3mFIAFVr7vX45Lfb0geCjA ...
- Java并发--并发容器之ConcurrentHashMap
下面这部分内容转载自: http://www.haogongju.net/art/2350374 JDK5中添加了新的concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为 ...
- BestCoder Round #1 第一题 逃生
// 等了好久,BESTCODER 终于出来了..像咋这样的毕业的人..就是去凑凑热闹// 弱校搞acm真是难,不过还是怪自己不够努力// 第一题是明显的拓扑排序,加了了个字典序限制而已// 用优先队 ...
- JavaScript for 循环累加 json 字符串
var msg = {"status":1,"data":[{"id":"12","words":& ...
- LeetCode 417. Pacific Atlantic Water Flow
原题链接在这里:https://leetcode.com/problems/pacific-atlantic-water-flow/description/ 题目: Given an m x n ma ...
- UVA11538 Chess Queen
题意 给一个\(n \times m\)的棋盘,输出有多少种方法放置两个互相攻击的皇后. \(n,m \leq 10^6\) 分析 参照刘汝佳的题解. 横.竖.斜三种情况互不相干,加法原理统计. 横竖 ...