默认情况下,启用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中,你可以使用 execcurl

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集群中使用两种方式调用外部服务:

  1. 使用egress rule(推荐)
  2. 配置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相关推荐

  1. Control Egress Traffic(0.8)

    默认情况下,启用Istio的服务无法访问集群外的URL,因为在pod中使用iptables将所有出站流量透明地重定向到仅处理集群内目的地的sidecar代理. 这个task描述如何配置Istio向启用 ...

  2. Control Egress TCP Traffic

    Control Egress Traffic task 演示了在服务网格内的应用如何访问外部(k8s集群外)的HTTP和HTTPS服务.快速提醒:默认情况下,启用Istio的应用不能访问集群外部的UR ...

  3. TLS Origination for Egress Traffic(0.8)

    Control Egress Traffic task 演示了在服务网格内的应用如何访问外部(k8s集群外)的HTTP和HTTPS服务.快速提醒:默认情况下,启用Istio的应用不能访问集群外部的UR ...

  4. Configure an Egress Gateway(0.8)

    Control Egress Traffic task 演示了在服务网格内的应用如何访问外部(k8s集群外)的HTTP和HTTPS服务.快速提醒:默认情况下,启用Istio的应用不能访问集群外部的UR ...

  5. Istio官方文档翻译

    本来是有翻译好的文档的,但是当时没打开,不巧是今天给打开了...但是我花了两天的时间翻译了不少,没办法,为了尊重自己的劳动成果,还是贴过来吧... 还是建议大家直接去Istio官方文档中文版. 我只翻 ...

  6. 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 ...

  7. Credit-based Flow Control的前世今生

    撰文 | 乔晶.姚迟 1 OneFlow 中的流控 OneFlow 团队此前发布的<仅此一文让您掌握OneFlow框架的系统设计>介绍了 OneFlow 是通过背压机制解决流控问题的.文中 ...

  8. hic染色体构想_了解微服务:从构想到起点

    hic染色体构想 by Michael Douglass 迈克尔·道格拉斯(Michael Douglass) 了解微服务:从构想到起点 (Understanding Microservices: F ...

  9. 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 ...

最新文章

  1. 前后端分离的探索(二)
  2. Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT
  3. 永远的Hello World
  4. 光伏价格趋势:中美因素汇聚 市场需求向7月延伸
  5. VTK:图像加权和用法实战
  6. Bzoj2656 [Zjoi2012]数列(sequence)
  7. (需求实战_04)_定时压缩昨天指定文件并删除
  8. Java实验2 Java语言基础
  9. Angular——Angular 教程
  10. Golang语言 零基础入门教程
  11. 平时工作中如何体现个人技术深度?
  12. 幽灵蛛(pholcus)(三)--strings学习资料
  13. 掌握算法本质背后的计算思维,尽在吴军博士《计算之魂》这本书中
  14. Objective-C 理解之方括号[ ]的使用
  15. Linux下socket编程之UDP简单实现
  16. java词云推荐(KUMO)
  17. 无线网卡和无线上网卡
  18. cesium之地图显示坐标、视角高度、比例尺、海拔效果篇
  19. iOS14 系统 YBImageBrowser显示图片黑屏问题
  20. python游戏库pygame经典教程

热门文章

  1. 卡通人物数据集下载地址
  2. 使用Google Colab对PUBG的玩家死亡数据集进行可视化分析
  3. 2.5 随从受伤溅血效果的实现———自制卡牌游戏之旅
  4. 【总结】线性代数的本质 - 3
  5. iOS : 通过路径读取文件的几种方法
  6. nodejs图片处理(上传图片,复制图片,移动图片)
  7. java徽章_java
  8. 用python实现一个自动保存复制图片的功能
  9. C语言模拟回合制游戏 源码
  10. element-ui message 显示重叠问题