• 在谷歌云 Endpoints 服务中安装 Istio
    • 开始之前
    • HTTP Endpoints 服务
    • 使用安全的 Ingress HTTPS Endpoints 服务
    • 在 HTTPS Endpoints 服务中使用 LoadBalancer EXTERNAL_IP

    在谷歌云 Endpoints 服务中安装 Istio

    这篇文档展示了如何手动整合 Istio 和现有的谷歌云 Endpoints 服务。

    开始之前

    如果你没有一个端点服务,但是想尝试它,你可以按照这个指令在 GKE 中创建一个 Endpoints 服务。你可以用下面的命令测试服务。

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

    在 GKE 中安装 Istio,参考在 Google Kubernetes Engine 中快速开始。

    HTTP Endpoints 服务

    • 使用 —includeIPRanges 将服务注入到网格中,通过该指令允许出口直接调用外部服务。否则,ESP 将无法接受谷歌云的控制。

    • 注入后,发出上面提到的测试命令确保调用 ESP 继续工作。

    • 如果你想通过 Ingress 访问服务,以下是创建 Ingress 的定义:

    1. $ kubectl apply -f - <<EOF
    2. apiVersion: extensions/v1beta1
    3. kind: Ingress
    4. metadata:
    5. name: simple-ingress
    6. annotations:
    7. kubernetes.io/ingress.class: istio
    8. spec:
    9. rules:
    10. - http:
    11. paths:
    12. - path: /echo
    13. backend:
    14. serviceName: esp-echo
    15. servicePort: 80
    16. EOF
    • 通过指令获取 Ingress IP 和端口。你可以通过 Ingress 验证 Endpoints 服务:
    1. $ curl --request POST --header "content-type:application/json" --data '{"message":"hello world"}' "http://${INGRESS_HOST}:${INGRESS_PORT}/echo?key=${ENDPOINTS_KEY}"i

    使用安全的 Ingress HTTPS Endpoints 服务

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

    • 在你的网格服务中导出 HTTP 端口。在 ESP 部署参数中添加 "—http_port=8081" 导出 HTTP 端口:
    1. - port: 80
    2. targetPort: 8081
    3. protocol: TCP
    4. name: http
    • 通过下面的命令在 Istio 中打开 TLS 双向认证:
    1. $ kubectl edit cm istio -n istio-system

    并且取消注释:

    1. authPolicy: MUTUAL_TLS
    • 在此之后,你会发现访问 EXTERNAL_IP 不再生效, 因为 Istio 代理仅接受安全网格链接。通过 Ingress 访问有效是因为 Ingress 使 HTTP 终止。

    • 安全访问 Ingress,查看相关说明。

    • 你可以通过安全的 Ingress 访问 Endpoints 服务来验证:

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

    在 HTTPS Endpoints 服务中使用 LoadBalancer EXTERNAL_IP

    这个方案使用 Istio 代理绕过 TCP。通过 ESP 的流量是安全的。这不是推荐的方法。

    • 将 HTTP port 的名字更新为 tcp
    1. - port: 80
    2. targetPort: 8081
    3. protocol: TCP
    4. name: tcp
    • 更新网格服务部署。请参阅 Pods 和 Services 要求中端口命名的规则。

    • 你可以通过安全的 Ingress 访问 Endpoints 服务来验证:

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