OpenShift 4 之Istio-Tutorial (11) 控制Egress访问

本系列OpenShift Servic Mesh教程是基于Red Hat官方公开发行的《Introducing Istio Service Mesh for Micoservices》出版物,我将所有操作在OpenShift 4.2.x环境中进行了验证。喜欢读英文或者需要了解更多和场景相关知识点的小伙伴可以通过上面的链接下载该书慢慢阅读。

Istio缺省是不限制服务网格中的服务对外部访问的,不过我们可以对Egress进行控制,以限制Istio上的服务对外部资源的访问。

环境准备:我们在开始之前先确保环境和完成《OpenShift 4 之Istio-Tutorial (2) 部署三个微服务》一样,只部署了3个微服务和VirtualService、Gateway,没有DestinationRule。

  1. 首先把recommendation v1和recommendation v2部署删除,然后部署recommendation v3(这个微服务会访问http://worldclockapi.com/api/json/cet/now外部服务,以获得当前的时间)。
$ oc delete -f recommendation/kubernetes/Deployment-v1.yml
$ oc delete -f recommendation/kubernetes/Deployment-v2.yml
$ oc apply -f recommendation/kubernetes/Deployment-v3.yml
$ oc get pod
NAME                                 READY   STATUS    RESTARTS   AGE
customer-77dc47d7f8-szhd5            2/2     Running   16         2d11h
preference-v1-55476494cf-xm4dq       2/2     Running   0          4d8h
recommendation-v3-57556796f8-qcdl7   2/2     Running   0          151m
  1. 此时向customer发测试请求,可以正常访问。
$ curl $INGRESS_GATEWAY/customer
customer => preference => recommendation v3 2020-01-19T11:33+01:00 from '83bbb6d11a7e': 1
  1. 执行以下命令,修改Istio缺省的对外访问策略为必须是REGISTRY_ONLY的服务才能通过Egress访问外部服务。
$ oc get configmap istio -n istio-system -o yaml | sed 's/mode: ALLOW_ANY/mode: REGISTRY_ONLY/g' | kubectl replace -n istio-system -f -
  1. 此时向customer发测试请求,确认应无法正常访问外部服务。
$ curl $INGRESS_GATEWAY/customer
customer => Error: 503 - preference => Error: 500 - <!doctype html>
...
  1. 文件istiofiles/service-entry-egress-worldclockapi.yml定义了ServiceEntry对象允许访问“worldclockapi.com”主机。
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: worldclockapi-egress-rule
spec:
  hosts:
  - worldclockapi.com
  ports:
  - name: http-80
    number: 80
    protocol: http

执行命令,创建ServiceEntry对象。

$ create -f istiofiles/service-entry-egress-worldclockapi.yml
  1. 此时向customer发测试请求,又可以正常访问了。
$ curl $INGRESS_GATEWAY/customer
customer => preference => recommendation v3 2020-01-19T11:43+01:00 from '83bbb6d11a7e': 4
  1. 删除recommendation v3,恢复环境。
$ oc delete -f recommendation/kubernetes/Deployment-v3.yml
$ oc delete -f istiofiles/service-entry-egress-worldclockapi.yml

你可能感兴趣的:(OpenShift,4,ServiceMesh,微服务)