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,万一以后有需要还可以用得上。