如何在istio中为服务通信提供安全的服务?

时间:2020-01-25 08:44:52

标签: kubernetes istio

我正试图从istio中的一个Pod中调用在另一个Pod中运行的Web服务。

我用python编写了两个微服务。您能告诉我如何从一个Pod中运行的一个微服务到另一个Pod中运行的另一个微服务进行https调用。

我可以在istio网站上找到以下示例命令。

kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c istio-proxy -- curl https://httpbin:8000/headers -o /dev/null -s -w '%{http_code}\n' --key /etc/certs/key.pem --cert /etc/certs/cert-chain.pem --cacert /etc/certs/root-cert.pem -k

但是那是从istio-proxy容器发出https调用,但是我的微服务如何将请求转发到istio-proxy,然后istio-proxy将该请求转发到另一个pod中的另一个istio-proxy?

通过此链接https://istio.io/docs/concepts/security/,我无法理解“ Istio将来自客户端的出站流量重新路由到客户端的本地Sidecar Envoy”的说法。我的python微服务中调用https Web服务的代码有什么变化?如果有的话,请举一个完整的例子?

1 个答案:

答案 0 :(得分:2)

istio文档中的task显示了双向TLS如何与HTTPS服务一起使用。它包括:

  • 在没有Istio sidecar的情况下部署HTTPS服务
  • 在禁用了相互TLS的情况下在Istio上部署HTTPS服务
  • 部署启用了双向TLS的HTTPS服务。

以上所有方案均提供了可以在一个微服务容器上运行以命中另一种微服务的https端点的命令。例如,从睡眠容器中通过https打nginx

kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl https://my-nginx -k

istio的好处是您不需要在python应用程序中进行任何代码更改。 Istio代理端汽车将做必要的事情以启用诸如mTLS之类的安全功能。