Istio - Egress实践
文章目录
1. 故事背景
在Ingress里已经说到,Istio掌管了所有流量的进进出出。当时我还没在意,默认把“出”给过滤了,当我真正使用的时候,才发现,TA真的把“出”也管了。
2. 提前准备
- 本次试验是在
CentOS 7.4 64位
系统,root
用户下进行 - Kubernetes(k8s)集群
- istio版本
1.0.2
3. 实践
3.1 简述
参考官网文档:配置 Egress 网关
当初服务启动时,我就纳闷为什么数据库连接不上!原来是网络被拒了!
对于访问集群外部的服务时,在Istio里是会被拒的,可以认为是防火墙。那么如何才可以出去呢?你需要Egress
!
3.2 配置Egress
配置可以很复杂,也可以很简单。我对网络出口没有什么需求,所以我选择简单模式。如下:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: bar
namespace: foo
spec:
hosts:
# 这里可以配多个,如果你对出口安全要求严格,可以一个一个配,可以是域名或者IP
# 我这里使用通配符
- '*'
ports:
# 这里配置允许的端口
# 可以看出,我这里用了redis、mysql、es
- name: tcp-redis
number: 6379
protocol: tcp
- name: tcp-mysql
number: 3306
protocol: tcp
# 这里特别注意,如果允许80端口,protocol一定要填http,不要填tcp,否则会失效
- name: tcp-http
number: 80
protocol: http
- name: tcp-https
number: 443
protocol: tcp
- name: tcp-elasticsearch
number: 9200
protocol: tcp
如上配置,允许所有的外部域名/IP,以及配置的端口,可以对外访问
4. 总结
Egress 和 Ingressgateway 一样,只要在网格里,那些流量限制、超时时间等流量管理的功能都可以用得上。只是目前我的需求还比较简单。 而在安装Istio时,其实是可以指定不限制出口,但仅在安装时。实践后发现,其实配置也不复杂,建议还是使用Egress,万一以后有需要还可以用得上。
文章作者 xifan
上次更新 2018-12-01