控制 Egress TCP 流量

    此任务描述如何配置 Istio 内应用如何访问 Istio 外部的应用。

    • 遵循安装指南设置Istio
    • 启动sleep示例,用于测试外部访问。注意: 所有可以在容器中执行和curl的 pod 都是可以用于本任务的。

    为外部TCP服务设置路由规则

    在这个任务中,我们将通过由应用发起 HTTPS 请求访问 wikipedia.org 。这个任务将演示应用无法使用 HTTP 与 HTTPS 协议访问外部服务的用例。中描述了访问 HTTP 与 HTTPS 协议的外部应用,在控制 Egress 流量任务中,https://www.google.com通过使用http://www.google.com:443来进行访问。

    由应用发起的 HTTPS 流量将被视为不透明的 TCP 。为了启用这种流量,我们在端口443上定义一个 TCP Egress 规则。

    假设通过域名wikipedia.org访问该实例。这意味我们必须指定 wikipedia.org 对应的所有 IP 的 TCP Egress 规则。幸运的是, wikipedia.org的所有 IP 地址在发布。它是遵循CIDR notation的一个 IP 列表: 91.198.174.192/27, 103.102.166.224/27 ...,我们必须为每个IP块定义一个 TCP Egress 规则。
    或者, 如果通过 IP 访问 wikipedia.org 的话, 则必须定义该 IP 的 Tcp Egress 规则。

    让我们创建出口规则来启用 TCP 访问 wikipedia.org

    1. cat <<EOF | istioctl create -f -
    2. kind: EgressRule
    3. metadata:
    4. name: wikipedia-range1
    5. spec:
    6. destination:
    7. service: 91.198.174.192/27
    8. ports:
    9. - port: 443
    10. protocol: tcp
    11. ---
    12. kind: EgressRule
    13. name: wikipedia-range2
    14. destination:
    15. service: 103.102.166.224/27
    16. ports:
    17. - port: 443
    18. protocol: tcp
    19. ---
    20. kind: EgressRule
    21. metadata:
    22. name: wikipedia-range3
    23. spec:
    24. destination:
    25. service: 198.35.26.96/27
    26. ports:
    27. - port: 443
    28. protocol: tcp
    29. ---
    30. kind: EgressRule
    31. metadata:
    32. name: wikipedia-range4
    33. spec:
    34. service: 208.80.153.224/27
    35. - port: 443
    36. protocol: tcp
    37. ---
    38. kind: EgressRule
    39. metadata:
    40. name: wikipedia-range5
    41. spec:
    42. destination:
    43. service: 208.80.154.224/27
    44. ports:
    45. - port: 443
    46. protocol: tcp
    47. EOF

    这个命令将创建五个 TCP Egress 规则,wikipedia.org每个不同的 IP 地址块都有一个规则。请注意---(三个破折号)是 Egress 规则之间的分隔符。这是流中文档之间的YAML分隔符。它允许我们使用单个 istioctl 命令创建多个配置工件。

    通过HTTPS访问wikipedia.org

    1. kubectl exec进入 pod 并执行测试代码。如果您正在使用 sleep 应用程序,请运行以下命令:
      1. curl -o /dev/null -s -w "%{http_code}\n" https://www.wikipedia.org
      2. 200

      我们应该看到200打印输出,这是正确返回的 HTTP Code 。

    2. 现在让我们获取英文维基百科上拥有文章的当前数量:

      输出应该类似于:

      1. <div id="articlecount" style="font-size:85%;"><a href="/wiki/Special:Statistics" title="Special:Statistics">5,563,121</a> articles in <a href="/wiki/English_language" title="English language">English</a></div>
    1. 删除我们创建的 Egress 规则。
    2. 关闭 应用程序。

    下一步是什么

    • 该流量的任务, HTTP 和 HTTPS 。