Control Egress Traffic
默认情况下,启用Istio的服务无法访问集群外的URL,因为在pod中使用iptables将所有出站流量透明地重定向到仅处理集群内目的地的sidecar代理。
这个task描述如何配置Istio向启用Istio的客户端暴露外部服务。你将了解如何使用egress规则启用对外部服务的访问,或者简单地绕过特定范围IP的Istio代理。
Before you begin
- 安装Istio
- 启动 sleep 示例来作为外部调用的测试源
kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml)
注意在任何pod中,你可以使用 exec
和 curl
。
Using Istio egress rules
使用Istio的egress规则,你可以从你的Istio集群访问任何公共可访问的服务。在这个task中。我们将使用 httpbin.org 和 www.google.com 作为例子。
Configuring the external services
1.为能够访问一个外部HTTP服务创建一个egress规则:
cat <<EOF | istioctl create -f -
apiVersion: config.istio.io/v1alpha2
kind: EgressRule
metadata:name: httpbin-egress-rule
spec:destination:service: httpbin.orgports:- port: 80protocol: http
EOF
2.为能访问一个外部HTTPS服务创建一个egress规则:
cat <<EOF | istioctl create -f -
apiVersion: config.istio.io/v1alpha2
kind: EgressRule
metadata:name: google-egress-rule
spec:destination:service: www.google.comports:- port: 443protocol: https
EOF
Make request to the external services
1.进入作为测试源使用的pod。例如,如果你正使用sleep服务,使用下列命令:
export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
kubectl exec -it $SOURCE_POD -c sleep bash
2.发出一个外部HTTP服务的请求:
curl http://httpbin.org/headers
3.发出一个外部HTTPS服务的请求。外部HTTPS类型的服务必须使用HTTP加特殊端口的请求方式:
curl http://www.google.com:443
Setting route rules on an external service
和集群内部请求类似,Istio的 routing rules 也可以通过使用egress rules访问外部服务。为了说明这一点,我们将使用Istioctl对调用 httpbin.org服务设置一个超时规则。
1.从用作测试源的pod内部调用 httpbin.org 外部服务的 /delay
端点
kubectl exec -it $SOURCE_POD -c sleep bash
time curl -o /dev/null -s -w "%{http_code}\n" http://httpbin.org/delay/5
200
real 0m5.024s
user 0m0.003s
sys 0m0.003s
请求应该在大约5s内返回200(OK)。
2.退出源pod,并使用 istioctl
设置一个调用 httpbin.org 外部服务的3s超时:
cat <<EOF | istioctl create -f -
apiVersion: config.istio.io/v1alpha2
kind: RouteRule
metadata:name: httpbin-timeout-rule
spec:destination:service: httpbin.orghttp_req_timeout:simple_timeout:timeout: 3s
EOF
3.等待几秒,然后再次 curl 发送请求:
kubectl exec -it $SOURCE_POD -c sleep bash
time curl -o /dev/null -s -w "%{http_code}\n" http://httpbin.org/delay/5
504
real 0m3.149s
user 0m0.004s
sys 0m0.004s
这次在3s后返回504(网关超时)。尽管 httpbin.org 等待了5s,但是Istio 在3s时就切断了请求。
Calling external services directly
Istio的egress规则目前只支持HTTP/HTTPS请求。如果你想要通过其他协议(e.g., mongodb://host/database
)访问服务,或者你想完全绕过Istio特定范围IP,你需要配置源服务的Envoy sidecar来防止它 intercepting 外部请求。这可能在开始服务的时候,在 istioctl kube-inject 使用 --includeIPRanges
选项。
使用 --includeIPRanges
选项最简单的方式是将它用于集群内部服务的IP范围,从而排除外部IP被重定向到sidecar proxy中。然而,内部IP范围的值取决于你正在运行的集群。例如,Minikube的范围是 10.0.0.1/24,因此你将以下面这种方式启动sleep服务:
kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml --includeIPRanges=10.0.0.1/24)
通过这种方式启动你的服务后,Istio的sidecar仅拦截和管理集群内的请求。任何外部请求将简单绕过sidecar并直接到达它想去的目标。
export SOURCE_POD=$(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name})
kubectl exec -it $SOURCE_POD -c sleep curl http://httpbin.org/headers
Understanding what happened
这个task中,我们在Istio集群中使用两种方式调用外部服务:
- 使用egress rule(推荐)
- 配置Istio sidecar,使它的重新映射的IP表剔除外部IP。
第一种方法(egress rule)目前仅支持HTTP(S)请求,但允许你对集群内部或外部的调用服务使用所有相同的Istio服务网格功能。我们通过为调用外部服务设置超时规则来演示这部分。
第二种方法绕过Istio sidecar proxy,让你的服务直接访问任何外部URL。但是,以这种方式配置代理需要能够提供特定知识和配置。
Cleanup
1.移除规则
istioctl delete egressrule httpbin-egress-rule google-egress-rule
istioctl delete routerule httpbin-timeout-rule
2.关闭 sleep 服务
kubectl delete -f samples/sleep/sleep.yaml
Egress Rules and Access Control
注意到Istio Egress Rules不是一个安全功能。他们启用对外部服务(服务网格外)的访问。用户可以部署适当的安全机制,如防火墙,以及防止未经授权访问外部服务。我们正在添加对外部服务的访问控制支持。
Control Egress Traffic相关推荐
- Control Egress Traffic(0.8)
默认情况下,启用Istio的服务无法访问集群外的URL,因为在pod中使用iptables将所有出站流量透明地重定向到仅处理集群内目的地的sidecar代理. 这个task描述如何配置Istio向启用 ...
- Control Egress TCP Traffic
Control Egress Traffic task 演示了在服务网格内的应用如何访问外部(k8s集群外)的HTTP和HTTPS服务.快速提醒:默认情况下,启用Istio的应用不能访问集群外部的UR ...
- TLS Origination for Egress Traffic(0.8)
Control Egress Traffic task 演示了在服务网格内的应用如何访问外部(k8s集群外)的HTTP和HTTPS服务.快速提醒:默认情况下,启用Istio的应用不能访问集群外部的UR ...
- Configure an Egress Gateway(0.8)
Control Egress Traffic task 演示了在服务网格内的应用如何访问外部(k8s集群外)的HTTP和HTTPS服务.快速提醒:默认情况下,启用Istio的应用不能访问集群外部的UR ...
- Istio官方文档翻译
本来是有翻译好的文档的,但是当时没打开,不巧是今天给打开了...但是我花了两天的时间翻译了不少,没办法,为了尊重自己的劳动成果,还是贴过来吧... 还是建议大家直接去Istio官方文档中文版. 我只翻 ...
- Traffic light control using deep policy-gradient and value-function-based reinforcement learning
ISSN 1751-956X 作者:Seyed Sajad Mousavi1 , Michael Schukat1, Enda Howley 黄生词 蓝牛句 绿公式 红生涩 Abstract: Re ...
- Credit-based Flow Control的前世今生
撰文 | 乔晶.姚迟 1 OneFlow 中的流控 OneFlow 团队此前发布的<仅此一文让您掌握OneFlow框架的系统设计>介绍了 OneFlow 是通过背压机制解决流控问题的.文中 ...
- hic染色体构想_了解微服务:从构想到起点
hic染色体构想 by Michael Douglass 迈克尔·道格拉斯(Michael Douglass) 了解微服务:从构想到起点 (Understanding Microservices: F ...
- NetLink Communication Mechanism And Netlink Sourcecode Analysis
catalog 1. Netlink简介 2. Netlink Function API Howto 3. Generic Netlink HOWTO kernel API 4. RFC 3549 L ...
最新文章
- 前后端分离的探索(二)
- Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT
- 永远的Hello World
- 光伏价格趋势:中美因素汇聚 市场需求向7月延伸
- VTK:图像加权和用法实战
- Bzoj2656 [Zjoi2012]数列(sequence)
- (需求实战_04)_定时压缩昨天指定文件并删除
- Java实验2 Java语言基础
- Angular——Angular 教程
- Golang语言 零基础入门教程
- 平时工作中如何体现个人技术深度?
- 幽灵蛛(pholcus)(三)--strings学习资料
- 掌握算法本质背后的计算思维,尽在吴军博士《计算之魂》这本书中
- Objective-C 理解之方括号[ ]的使用
- Linux下socket编程之UDP简单实现
- java词云推荐(KUMO)
- 无线网卡和无线上网卡
- cesium之地图显示坐标、视角高度、比例尺、海拔效果篇
- iOS14 系统 YBImageBrowser显示图片黑屏问题
- python游戏库pygame经典教程