Istio 流量管理 serviceEntry 出口流量管理

无论是vs还是dr这些都是入口的流量。对于pod来说也会有出去的流量的。

除了对进来的流量做有效的控制之外,其实也可以控制出去的流量。istio-egress是出口网关,pod出去的时候要经过egress-gateway到达外界的某个终端。

hosts: - www.baidu.com  这个是pod要访问的服务器。pod里面设置的是dnsPolicy:clusterFirst,它的意思就是优先使用集群里面的dns,这个也就是kube-system命名空间下面的coredns了,location: MESH_EXTERNAL这个意思hosts是在网格之外的主机。

  • MESH_EXTERNAL -- 网格外部   控制去往网格外部的流量,百度就是网格之外的流量了
  • MESH_INTERNAL -- 网格内部    控制到网格内部某个主机的流量。
[root@k8s-master se]# cat se.yaml 
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: myse
  namespace: istio
spec:
  hosts:
  - www.baidu.com
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  resolution: STATIC
  location: MESH_EXTERNAL
  endpoints:
  - address: 192.168.26.3 

如果resolution: STATIC  address: 192.168.26.3   这样是去解析www.baidu.com的时候解析为192.168.26.3(此处的endpoint的地址是www.baidu.com的IP)

这样就是将域名百度解析为192.168.26.3 

结合VS进行流量控制


扫描二维码关注公众号,回复: 15604935 查看本文章
[root@k8s-master ~]# netstat -tpnl | grep 80
          tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      91791/nginx: master 
tcp6       0      0 :::80                   :::*                    LISTEN      91791/nginx: master 


[root@k8s-master se]# cat se.yaml 
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: myse
  namespace: istio
spec:
  hosts:
  - xx.rhce.cc
  ports:
  - number: 80
    name: https
    protocol: HTTPS
  resolution: STATIC
  location: MESH_EXTERNAL
  endpoints:
  - address: 192.168.11.135 

这里明确指出的是走向xx.rhce.cc,也就是出去的时候流量,xx.rhce.cc不是集群的,它不是我们网格里面的。得通过se加入到网格内。

# curl xx.rhce.cc
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://www.rhce.cc//">here</a>.</p>
</body></html>

我们要想通过vs来控制出口流量的话,那么一定要把服务器端写入到serviceEntry里,如果不写的话,则vs对他不生效。

如果只是单单的在里面加一条域名解析,那么是没问题可以访问集群外部的机器的,但是要实现控制必须使用se + vs
# cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
fe00::0	ip6-mcastprefix
fe00::1	ip6-allnodes
fe00::2	ip6-allrouters
10.244.169.156	pod1

流量想出口到网格之外的主机,就是将网格之外的主机纳管进入网格之内再去控制。

要想控制pod往网格之外的主机,那么要为网格之外的主机建立se,然后结合vs去做控制。

如果我们没有定义se,默认情况下,所有的出去的流量都是允许的。

默认策略


是否可以修改默认的流量控制--- 拒绝所有的出流量?

REGISTRY_ONLY:只允许访问网格之内的,只允许访问到注册到网格之内的才可以。

exportTo


在其他命名空间下创建了pod1,在某个命名空间下面定义的se和vs在其他命名空间下也生效了。

export to也就是我定义的se会不会影响到其他的命名空间。

.点代表影响当前命名空间。

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/131490388