作者:重羽玉婷018 | 来源:互联网 | 2023-09-18 19:18
服务入口 网关是将内部服务暴露给外部访问,服务入口正好相反,是把外部服务纳入到网格内部进行管理,主要是希望能够管理到外部服务的请求,比如需要对访问外部服务的请求做一些流量控制,还有就是能够帮我们扩展我们的网格,例如我们要给多个集群共享同一个网格(mesh) 从图上可以看出,服务入口相当于抽象了一个外部服务,然后内部服务就像访问网格内部的服务一样去访问外部服务
任务 说明:将httpbin注册为网格内部的服务,并配置流控策略 目标:学会通过服务入口扩展网格,掌握服务入口的配置方法
配置 因为bookinfo服务里,没有带curl这个命令,因此想要模拟内部服务去请求外部服务,需要在添加另外一个服务,官方提供了sleep这样的服务 httpbin是一个非常精简的测试http请求的服务 如http://httpbin.org/headers可以看到头信息
kubectl apply - f ./samples/sleep/sleep.yaml kubectl exec - it sleep- f8cbf5b76- 8fz8g - c sleep curl http: //httpbin.org
关闭出流量访问权限 outboundTrafficPolicy=REGISTER_ONLY 本来是ALLOW_ANY istio中默认所有的网格内的服务,是允许直接访问外部服务的,所以我们先关闭到允许访问外部服务的方式,设置成只有注册过的服务才能访问外部服务
kubectl get configmap istio - n istio- system - o yaml | sed 's/mode: ALLOW_ANY/mode : REGISTER_ONLY/g' | kubectl replace - n istio- system - f -
这样的话发现在服务内部无法访问外部 然后定义一个服务入口,让sleep服务可以通过服务入口访问外部服务
apiVersion : networking.istio.io/v1alpha3kind : ServiceEntrymetadata : name : httpbin- extspec : hosts : 外部服务的服务域名 - httpbin.org ports : 定义具体的访问这个服务的协议及端口 - number : 80 name : http protocol : HTTP location : MESH_EXTERNAL 定义网格外部还是内部 resolution : DNS 服务发现的机制, 通过dns发现
[ root@vms30 ~] kubectl get se NAME HOSTS LOCATION RESOLUTION AGE httpbin-ext [ httpbin.org] MESH_EXTERNAL DNS 27s
发现又可以访问了