【问题标题】:Istio in Azure AKS - Connection issues over 15001 port while connecting to Azure Redis CacheAzure AKS 中的 Istio - 连接到 Azure Redis 缓存时出现超过 15001 端口的连接问题
【发布时间】:2021-05-05 01:21:46
【问题描述】:

我们在 Azure AKS 中部署的 istio 中的 15001 端口遇到问题。

目前我们已经在 AKS 中部署了 Istio,并尝试以集群模式连接到 Azure 缓存 redis 实例。我们的 Azure redis 实例有两个以上启用 SSL 的分片,其中一个主节点分配在端口 15001 上。我们能够通过端口 6380、15000、15002、15003、15004 和 15005 端口从 AKS pod 连接到 Azure redis .但是,当我们尝试连接到超过 15001 时,我们会看到一些问题。当我们尝试从命名空间通过 15001 端口连接到 redis 时,没有来自同一个 aks 集群的 istio sidecar 注入,连接工作正常。

以下是我们 AKS 集群中部署的 rediscli pod 的日志。

成功案例:

redis-cli -h our-redis-host.redis.cache.windows.net -p 6380 -a our-account-key --cacert "BaltimoreCyberTrustRoot.pem" --tls ping

输出:

警告:在命令行界面上使用带有“-a”或“-u”选项的密码可能不安全。 乒乓

我们能够通过所有端口 - 6380、15000、15002、15003、15004 和 15005 连接到 redis。但是,当我们尝试使用 15001 连接时。我们遇到了以下错误

失败案例:

redis-cli -h our-redis-host.redis.cache.windows.net -p 15001 -a our-account-key --cacert "BaltimoreCyberTrustRoot.pem" --tls ping

输出:

警告:在命令行界面上使用带有“-a”或“-u”选项的密码可能不安全。 无法在 our-redis-host.redis.cache.windows.net 连接到 Redis :15001: SSL_connect failed: Success

从 15001 端口尝试时,我在 istio-proxy 日志中看不到任何条目。但是,当尝试其他端口时,我们可以在日志中看到如下条目

[2021-05-05T00:59:18.677Z] "- - -" 0 - - - "-" 600 3982 10 - "-" "-" "-" "-" "172.XX.XX.XX:6380" PassthroughCluster 172.XX.XX.XX:45478 172.22.XX.XX:6380 172.XX.XX.XX:45476 - -

这是因为 15001 端口阻止出站请求或操纵 15001 端口请求的证书。如果是,是否有任何配置将proxy_port更新为15001以外的其他端口?

注意:发布在 istio forum 上。在此处发布以扩大覆盖范围。

Istio 版本:

> istioctl version
client version: 1.8.2
control plane version: 1.8.3
data plane version: 1.8.3

【问题讨论】:

    标签: azure redis istio azure-aks


    【解决方案1】:

    Istio 中的 Envoy 使用端口 15001。应用程序不应使用 Istio 保留的端口以避免冲突。

    您可以阅读更多here

    【讨论】:

    • 谢谢。是的,检查了 istio 的端口要求。但是,我们正在尝试连接到对端口分配没有太多控制权的 Azure 缓存 Redis 实例。所以想检查是否还有其他选择。有关端口要求的 Azure 文档 - > link
    • 是否可以更新注入到 pod 的 istio sidecar 容器配置(通过更新 istio sidecar 定义的 configmap)以使用其他端口而不是 15001 进行出站流量。
    • 端口 15001 被硬编码为 ConfigMap 中 istio-iptables 的参数。改变它可能会以有趣的方式破坏事情。我不会推荐它。
    【解决方案2】:

    我们利用了 istio excludeOutboundPorts 注释的概念来绕过 istio envoy 代理拦截出站端口上的流量,我们发现由于 istio 端口要求而出现问题

    使用 istio 提供的注解,我们可以使用 IP 或端口范围来排除拦截。下面是对端口的解释

    template:
        metadata:
          labels:
            app: 'APP-NAME'
          annotations:
            traffic.sidecar.istio.io/excludeOutboundPorts: "15001"
    
    

    参考资料:

    Istio Annotations

    Istio traffic capture limitations

    Istio Port Requirement

    【讨论】:

      猜你喜欢
      • 2014-07-09
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多