• 安装 Istio 到 Google Cloud Endpoints 服务
    • 开始之前
    • HTTP Endpoints 服务
    • 使用安全加固的 Ingress 访问 HTTPS Endpoints service

    安装 Istio 到 Google Cloud Endpoints 服务

    本文档说明了如何手动将 Istio 与现有 Google Cloud Endpoints 服务集成。

    开始之前

    如果您没有 Endpoints 服务,但是想尝试一下,可以按照该说明指南在 GKE 上安装 Endpoints 服务。安装完成后,您应该能获取到 API 密钥,并将其存储在环境变量 ENDPOINTS_KEY 和外部 IP 地址 EXTERNAL_IP 中。您可以使用以下命令对服务进行测试:

    1. $ curl --request POST --header "content-type:application/json" --data '{"message":"hello world"}' "http://${EXTERNAL_IP}/echo?key=${ENDPOINTS_KEY}"

    要在 GKE 上安装 Istio,请参考 Google Kubernetes Engine 快速开始

    HTTP Endpoints 服务

    • 通过该说明指南,使用 —includeIPRanges 将服务和 Deployment 注入到网格中,这样 Egress 能够直接调用外部服务。否则,ESP 将无法访问 Google cloud 服务控件。

    • 注入以后,发出与上述相同的测试命令,以确保 ESP 调用在持续工作。

    • 如果您想通过 Istio ingress 来访问服务,创建以下网络定义:

    1. $ kubectl apply -f - <<EOF
    2. apiVersion: networking.istio.io/v1alpha3
    3. kind: Gateway
    4. metadata:
    5. name: echo-gateway
    6. spec:
    7. selector:
    8. istio: ingressgateway # use Istio default gateway implementation
    9. servers:
    10. - port:
    11. number: 80
    12. name: http
    13. protocol: HTTP
    14. hosts:
    15. - "*"
    16. ---
    17. apiVersion: networking.istio.io/v1alpha3
    18. kind: VirtualService
    19. metadata:
    20. name: echo
    21. spec:
    22. hosts:
    23. - "*"
    24. gateways:
    25. - echo-gateway
    26. http:
    27. - match:
    28. - uri:
    29. prefix: /echo
    30. route:
    31. - destination:
    32. port:
    33. number: 80
    34. host: esp-echo
    35. ---
    36. EOF
    • 通过该说明指南获取 ingress 网关 IP 和端口。您可以通过 Istio ingress 来验证将要访问到的 Endpoints 服务。
    1. $ curl --request POST --header "content-type:application/json" --data '{"message":"hello world"}' "http://${INGRESS_HOST}:${INGRESS_PORT}/echo?key=${ENDPOINTS_KEY}"

    使用安全加固的 Ingress 访问 HTTPS Endpoints service

    安全地访问网格 Endpoints 服务的推荐方式是通过配置了 TLS 的 ingress。

    • 在启用严格双向 TLS 的情况下安装 Istio。确认以下命令的输出结果为 STRICT 或为空:
    1. $ kubectl get meshpolicy default -n istio-system -o=jsonpath='{.spec.peers[0].mtls.mode}'
    • 通过该说明指南,使用 —includeIPRanges 将服务和 Deployment 重新注入到网格中,这样 Egress 可以直接调用外部服务。否则,ESP 将无法访问到 Google cloud 服务控件。

    • 然后,您将发现对 ENDPOINTS_IP 的访问将不再有效,因为 Istio 的代理只接受安全的网格连接。通过 Istio ingress 进行的访问应该依然有效,因为在网格里的 ingress 代理会初始化双向 TLS 连接。

    • 要确保 ingress 的访问安全性,请参考说明指南。