配置 Istio Ingress 网关

到目前为止,您使用 Kubernetes Ingress 从外部访问您的应用程序。在本模块中,您将配置流量通过 Istio 入口网关进入,以便对微服务的流量应用 Istio 控制。

  1. 将您的命名空间名称存储在 NAMESPACE 环境变量中。您需要它来识别日志中的微服务

    $ export NAMESPACE=$(kubectl config view -o jsonpath="{.contexts[?(@.name == \"$(kubectl config current-context)\")].context.namespace}")
    $ echo $NAMESPACE
    tutorial
    
  2. 为 Istio 入口网关的主机名创建环境变量

    $ export MY_INGRESS_GATEWAY_HOST=istio.$NAMESPACE.bookinfo.com
    $ echo $MY_INGRESS_GATEWAY_HOST
    istio.tutorial.bookinfo.com
    
  3. 配置 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
    
  4. 使用 确定入口 IP 和端口 部分中的说明设置 INGRESS_HOSTINGRESS_PORT

  5. 将此命令的输出添加到您的 /etc/hosts 文件中

    $ echo $INGRESS_HOST $MY_INGRESS_GATEWAY_HOST
    
  6. 从命令行访问应用程序的主页

    $ curl -s $MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage | grep -o "<title>.*</title>"
    <title>Simple Bookstore App</title>
    
  7. 将以下命令的输出粘贴到浏览器地址栏中

    $ echo http://$MY_INGRESS_GATEWAY_HOST:$INGRESS_PORT/productpage
    
  8. 通过在新终端窗口中设置无限循环来模拟应用程序的真实用户流量

    $ 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>
    ...
    
  9. 在 Kiali 控制台 my-kiali.io/kiali/console 中检查您的命名空间的图形。(my-kiali.io URL 应该在您 之前 设置的 /etc/hosts 文件中)。

    这次,您可以看到流量来自两个来源,unknown(Kubernetes Ingress)和 istio-ingressgateway istio-system(Istio 入口网关)。

    Kiali Graph Tab with Istio Ingress Gateway
    带有 Istio 入口网关的 Kiali 图形选项卡
  10. 此时,您可以停止通过 Kubernetes Ingress 发送请求,而仅使用 Istio Ingress Gateway。停止您在前面步骤中设置的无限循环(终端窗口中按 Ctrl-C)。在真实的生产环境中,您需要更新应用程序的 DNS 条目以包含 Istio Ingress Gateway 的 IP 地址,或者配置您的外部负载均衡器。

  11. 删除 Kubernetes Ingress 资源

    $ kubectl delete ingress bookinfo
    ingress.extensions "bookinfo" deleted
    
  12. 在一个新的终端窗口中,按照前面步骤的描述重新启动真实世界用户流量模拟。

  13. 在 Kiali 控制台中检查您的图表。大约一分钟后,您将看到 Istio Ingress Gateway 作为应用程序的唯一流量来源。

    Kiali Graph Tab with Istio Ingress Gateway as a single source of traffic
    Kiali 图表选项卡,其中 Istio Ingress Gateway 作为唯一流量来源

您已准备好配置 使用 Istio 进行日志记录

这些信息是否有用?
您是否有任何改进建议?

感谢您的反馈!