在 Google Cloud Endpoints 服务上安装 Istio
该文档展示了如何将 Istio 手动集成至现成的 Google Cloud Endpoints 服务中。
开始之前
如果您还没有 Endpoints 服务并想尝试一下,请按照这个说明在 GKE 上设置一个 Endpoints 服务。设置完成后,您会得到一个 API key,将它存为 ENDPOINTS_KEY
环境变量,然后将 external IP 地址存为 EXTERNAL_IP
。您可以使用以下命令测试该服务:
$ curl --request POST --header "content-type:application/json" --data '{"message":"hello world"}' "http://${EXTERNAL_IP}/echo?key=${ENDPOINTS_KEY}"
按照使用 Google Kubernetes Engine 快速开始的说明为 GKE 安装 Istio。
HTTP endpoints 服务
按照这篇说明使用
—includeIPRanges
将 service 和 deployment 注入到网格中,以让 Egress 可以直接调用外部服务。否则,ESP 将无法访问 Google cloud service control。注入后,使用上面同样的测试命令以确保访问 ESP 依然有效。
如果您希望通过 Istio ingress 访问该服务,请创建如下网络定义:
$ kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: echo-gateway
spec:
selector:
istio: ingressgateway # use Istio default gateway implementation
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: echo
spec:
hosts:
- "*"
gateways:
- echo-gateway
http:
- match:
- uri:
prefix: /echo
route:
- destination:
port:
number: 80
host: esp-echo
---
EOF
- 按照这篇说明获取 ingress 网关的 IP 和端口。您可以使用以下命令检查一下通过 Istio ingress 访问 Endpoints 服务:
$ curl --request POST --header "content-type:application/json" --data '{"message":"hello world"}' "http://${INGRESS_HOST}:${INGRESS_PORT}/echo?key=${ENDPOINTS_KEY}"
使用安全 Ingress 的 HTTPS endpoints 服务
安全地访问网格 Endpoints 服务的推荐方式是通过一个配置了 TLS 的 ingress。
- 在启用严格双向 TLS 的情况下安装 Istio。确认下列命令的输出是
STRICT
还是空的:
$ kubectl get meshpolicy default -n istio-system -o=jsonpath='{.spec.peers[0].mtls.mode}'