我们正在启用istio的kubernetes集群中运行大量微服务。其中一个微服务会调用集群外部的外部服务,而我需要通过也在集群外部运行的公司代理路由特定的调用。
为了进一步说明,例如,我在容器中设置了HTTP_PROXY并将curl调用设为http://external.com,因为调用是通过代理路由的,因此调用成功,但是我希望istio进行此路由通过代理透明。
例如。从容器中卷曲http://external.com,然后istio应该通过公司代理自动路由http呼叫并返回响应
我已经为external.com和proxy.com创建了服务条目,以使通话成功
答案 0 :(得分:0)
如果我理解正确,您正在寻找的是出口网关。
这是从Istio documentation配置外部HTTPS代理的教程的一部分:
配置到外部HTTPS代理的流量
- 为HTTPS代理定义一个TCP(不是HTTP!)服务条目。尽管应用程序使用HTTP CONNECT方法与HTTPS代理建立连接,但是您必须为TCP流量而不是HTTP配置代理。建立连接后,代理将简单地充当TCP隧道。
$ kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1alpha3 kind: ServiceEntry metadata: name: proxy spec: hosts: - my-company-proxy.com # ignored addresses: - $PROXY_IP/32 ports: - number: $PROXY_PORT name: tcp protocol: TCP location: MESH_EXTERNAL EOF
- 从默认名称空间中的sleep pod发送请求。由于睡眠舱具有侧车,因此Istio可以控制其交通。
$ kubectl exec -it $SOURCE_POD -c sleep -- sh -c "HTTPS_PROXY=$PROXY_IP:$PROXY_PORT curl https://en.wikipedia.org/wiki/Main_Page" | grep -o "<title>.*</title>" <title>Wikipedia, the free encyclopedia</title>
- 检查Istio Sidecar代理的日志以获取您的请求:
$ kubectl logs $SOURCE_POD -c istio-proxy [2018-12-07T10:38:02.841Z] "- - -" 0 - 702 87599 92 - "-" "-" "-" "-" "172.30.109.95:3128" outbound|3128||my-company-proxy.com 172.30.230.52:44478 172.30.109.95:3128 172.30.230.52:44476 -
- 检查代理的访问日志以获取您的请求:
$ kubectl exec -it $(kubectl get pod -n external -l app=squid -o jsonpath={.items..metadata.name}) -n external -- tail -f /var/log/squid/access.log 1544160065.248 228 172.30.109.89 TCP_TUNNEL/200 87633 CONNECT en.wikipedia.org:443 - HIER_DIRECT/91.198.174.192 -
查看整个教程,因为它涵盖了设置要求,并且具有模拟外部代理的步骤,因此您可以比较它是否按预期工作。