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

宦宏爽
2023-12-01

OpenShift 4.x HOL教程汇总
说明:本文已经在OpenShift 4.12环境中验证

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 -n ${ISTIO_APP}
$ oc delete -f recommendation/kubernetes/Deployment-v2.yml -n ${ISTIO_APP}
$ oc apply -f recommendation/kubernetes/Deployment-v3.yml -n ${ISTIO_APP}
$ oc get pod -n ${ISTIO_APP}
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 -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 -n ${ISTIO_APP}
  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 -n ${ISTIO_APP}
$ oc delete -f istiofiles/service-entry-egress-worldclockapi.yml -n ${ISTIO_APP}
 类似资料: