配置 Istio Ingress 网关
到目前为止,您使用 Kubernetes Ingress 从外部访问您的应用程序。在本模块中,您将配置流量通过 Istio 入口网关进入,以便对微服务的流量应用 Istio 控制。
将您的命名空间名称存储在
NAMESPACE
环境变量中。您需要它来识别日志中的微服务$ export NAMESPACE=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}") $ echo $NAMESPACE tutorial
为 Istio 入口网关的主机名创建环境变量
$ export MY_INGRESS_GATEWAY_HOST=istio.$NAMESPACE.bookinfo.com $ echo $MY_INGRESS_GATEWAY_HOST istio.tutorial.bookinfo.com
配置 Istio 入口网关
$ kubectl apply -f - <<EOF apiVersion: networking.istio.io/v1 kind: Gateway metadata: name: bookinfo-gateway spec: selector: istio: ingressgateway # use Istio default gateway implementation servers: - port: number: 80 name: http protocol: HTTP hosts: - $MY_INGRESS_GATEWAY_HOST --- apiVersion: networking.istio.io/v1 kind: VirtualService metadata: name: bookinfo spec: hosts: - $MY_INGRESS_GATEWAY_HOST gateways: - bookinfo-gateway.$NAMESPACE.svc.cluster.local http: - match: - uri: exact: /productpage - uri: exact: /login - uri: exact: /logout - uri: prefix: /static route: - destination: host: productpage port: number: 9080 EOF
使用 确定入口 IP 和端口 部分中的说明设置
INGRESS_HOST
和INGRESS_PORT
。将此命令的输出添加到您的
/etc/hosts
文件中$ echo $INGRESS_HOST $MY_INGRESS_GATEWAY_HOST
从命令行访问应用程序的主页
$ curl -s $MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage | grep -o "<title>.*</title>" <title>Simple Bookstore App</title>
将以下命令的输出粘贴到浏览器地址栏中
$ echo http://$MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage
通过在新终端窗口中设置无限循环来模拟应用程序的真实用户流量
$ while :; do curl -s <output of the previous command> | grep -o "<title>.*</title>"; sleep 1; done <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> <title>Simple Bookstore App</title> ...
在 Kiali 控制台
my-kiali.io/kiali/console
中检查您的命名空间的图形。(my-kiali.io
URL 应该在您 之前 设置的/etc/hosts
文件中)。这次,您可以看到流量来自两个来源,
unknown
(Kubernetes Ingress)和istio-ingressgateway istio-system
(Istio 入口网关)。带有 Istio 入口网关的 Kiali 图形选项卡 此时,您可以停止通过 Kubernetes Ingress 发送请求,而仅使用 Istio Ingress Gateway。停止您在前面步骤中设置的无限循环(终端窗口中按
Ctrl-C
)。在真实的生产环境中,您需要更新应用程序的 DNS 条目以包含 Istio Ingress Gateway 的 IP 地址,或者配置您的外部负载均衡器。删除 Kubernetes Ingress 资源
$ kubectl delete ingress bookinfo ingress.extensions "bookinfo" deleted
在一个新的终端窗口中,按照前面步骤的描述重新启动真实世界用户流量模拟。
在 Kiali 控制台中检查您的图表。大约一分钟后,您将看到 Istio Ingress Gateway 作为应用程序的唯一流量来源。
Kiali 图表选项卡,其中 Istio Ingress Gateway 作为唯一流量来源
您已准备好配置 使用 Istio 进行日志记录。