问题标签 [istio-gateway]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
istio - 多集群/多主网格中的共享 istio 出口网关
我们正在尝试在多集群/多主网格配置中设置出口网关,其中出口网关仅位于一个集群中,但同时用于两个集群。
用例是集群位于不同的网络区域,我们希望能够将流量透明地路由到一个区域,以透明地发送到另一个区域中的客户端。
我们在一个集群中遵循了本指南,它运行良好。但是,我们VirtualService
在第二个集群中设置使用第一个集群中的出口网关时遇到了麻烦。
在将以下虚拟服务部署到第二个集群时,我们得到 503 和 cluster_not_found。
第二个集群中 pod 上的端点代理配置错过了istio-egressgateway.istio-gateways.svc.cluster.local
端点(所有其他服务都被发现并定向到另一个集群的东西向网关)。我们认为这就是这VirtualService
在第二个集群中不起作用的原因。
作为一种解决方法,我们可以将出口流量重定向到第一个集群的入口网关,但这具有流量离开并重新进入网格的缺点,这可能会对跟踪和监控产生影响。
目前是否可以设置一个可供网格中所有集群使用的单一出口网关,还是我们必须采用解决方法?
kubernetes - 各种 Istio 端口是如何使用的?
问题
我正在尝试学习 Istio,并且正在设置我的 Istio Ingress-Gateway。当我设置它时,有以下端口选项(如此处所示):
- 港口
- 节点端口
- 目标端口
NodePort
我感觉合理。这是 Ingress-Gateway 将在 Kubernetes 集群中的每个工作节点上侦听的端口。到达那里的请求将使用 Ingress Gateway CRD 路由到 Kubernetes 集群。
在示例中,Port
通常设置为其匹配流量的公共端口(80 用于 http,443 用于 https 等)。我不明白 Istio 需要这个端口做什么,因为除了 NodePort 之外我没有看到任何流量。
TargetPort
对我来说是个谜。我已经看过一些关于普通 Istio 网关的文档(说它只在使用 ServiceEntries 时适用),但对于 Ingress-Gateway 没有任何意义。
我的问题是,关于入口网关(不是普通网关),什么是TargetPort
?
更多细节
最后,我试图调试为什么我的入口流量得到“连接被拒绝”响应。
我按照本教程使用以下配置设置了 Istio Operator :
我从我的配置中省略了TargetPort
,因为我发现这个发行说明说 Istio 将选择安全的默认值。
我尝试按照本教程中的步骤进行操作。
我尝试了该教程中指示的 curl 命令:
我得到了回应Failed to connect to 10.20.30.40 port 30980: Connection refused
但我可以 ping10.20.30.40
通,并且获取 NodePort 的命令返回30980
.
所以我开始想,这可能是TargetPort
我不理解的设置问题。
检查istiod
日志暗示我可能走在正确的轨道上。我跑了:
在我发现的日志中:
所以,如果你走到这一步,那么哇!我感谢你阅读这一切。如果您对我需要将 TargetPort 设置为什么有任何建议,或者如果我遗漏了其他内容,我很想听听。
istio - 尝试使用 Istio 网关访问 OpenFaaS
我试图通过 Istio 访问 OpenFaaS,其中包含网关和虚拟服务。
我需要为 OpenFaaS 创建一个单独的端点,例如:"http://istio_ingress_Loadbalancer/openfaas"
- 这应该给我 OpenFaaS UI。
任何人都可以帮助我,关于我很难访问这个吗?下面是我为网关和虚拟服务编写的代码。
kubernetes - Istio Ingress Gateway 在 Anthos 中不起作用
我在 GKE 中创建了一个集群 - (Google Kubernetes Engine) 按照此处的说明https://cloud.google.com/service-mesh/docs/quickstart-asm 但使用了我自己的部署文件。我部署了这些服务和网关文件。
部分服务
网关
我使用了正确的 IP 地址和主机,仍然无法通过 istio 入口网关服务访问微服务。
kubernetes - 处理与外部 Microsoft SQL VM 集群的连接的正确方法
我在我的 kubernetes 集群(1.19.1)中运行了一些 dotnet 核心微服务,它们都在运行 istio sidecar 代理(1.9.1),并且在调用连接到外部的微服务时,我看到了一些不稳定的连接行为SQL 集群。如果我查看边车日志,我可以在连接失败时看到:
istio 边车日志:
应用程序日志异常:
关于 SQL 集群的注意事项:在应用程序配置中,我们使用可用性组侦听器的 DNS 名称,例如 ag_listener.mydomain.com 来指向 HA SQL 集群。
这一切都在我们的 nonprod 中正常工作,我们也在其中运行 istio,尽管我们在 nonprod 中只运行一个 sql 实例。
目前,我确保将 outboundTrafficPolicy 设置为 ALLOW_ANY,但我仍然看到这种不稳定的连接行为。它不会一直发生,但它只是高度不一致。我的团队试图解决这个问题真的很痛苦。istio 上是否有适当的方法来处理与具有多个 IP 的 mssql 数据库集群的连接?谢谢你
addtl note:我尝试了以下 ServiceEntry 没有任何运气:
istio-gateway - 如何检索 HPE Ezmeral 容器平台托管集群的 istio 入口网关主机?
我已经按照文档配置了一个带有 istio-ingressgateway 的 K8S集群。
尽管 HPE Container Platform 托管的 haproxy 网关可以将流量路由到 istio-ingressgateway,但我想直接访问主机端点。
如何确定避开托管 haproxy 网关的主机的入口 IP 地址和端口?
istio - 访问公司代理后面的外部 jwksuri
我是 istio 的新手,对配置请求身份验证策略有疑问。该策略使用一个 jwksuri,它是一个外部 URI。该策略应用于 istio-system 命名空间。当我应用此策略并执行
应用该策略的入口网关 LDS 被标记为过时。如果我删除此策略,网关将返回 SYNCED 状态。由于我们位于公司代理后面,因此似乎无法访问此 jwksuri。我创建了服务条目来访问像这样的外部 jwks uri
还尝试参考此文档https://istio.io/latest/docs/tasks/traffic-management/egress/http-proxy/创建另一个服务条目“配置到外部代理的流量”
但这不起作用。我应该如何在 Istio 中配置公司代理。
编辑这是 istiod 中的日志(请注意https://authorization.company.com/jwk是外部 url)
无法找到解决此问题的方法。截至目前,将 jwks 嵌入到 jwt 规则中。但这有一个问题,每当公钥密钥被轮换时。jwt 规则失败。这是一个代理问题,但不确定如何绕过
kubernetes - wsl2 docker 桌面上的 Istio 入口网关
我正在尝试使用 wsl2 和 docker Desk 在本地运行 bookinfo 示例。我在尝试通过网关访问 productpage 服务时遇到问题,因为连接被拒绝。我不确定我是否错过了什么。这是我在互联网上搜索了很多之后所做的
- 部署了 bookinfo 示例中的所有服务并全部运行,我可以使用 kubectl exec 从其他服务中卷曲 productpage
- 使用示例中的文件部署 bookinfo-gateway,在默认命名空间下没有任何更改
istio-ingressgateway 可以在 80 上通过 localhost 暴露给外部(不确定如何在 istio 安装期间对其进行配置),据我所知 bookinfo-gateway kubectl get svc istio-ingressgateway -n istio 将使用它-系统
按照说明中的确定入口 IP 和端口部分。
我的 INGRESS_HOST=127.0.0.1 和 INGRESS_PORT 是 80
- curl -v -s http://127.0.0.1:80/productpage | grep -o ".*"
在浏览器上尝试这个http://127.0.0.1/productpage,返回 404。这个 404 是否意味着网关有点启动但虚拟服务不工作?
进一步的问题是否相关。我有点困惑 wsl2 现在是如何工作的。看起来windows浏览器上的localhost和wsl2终端不是一回事,虽然我知道有一种从windows到wsl2服务器的转发(我可以从/etc/resolv.conf获取它的IP)。如果相同,为什么一个返回连接被拒绝,另一个返回 404
在 Windows 上,我尝试禁用 IIS 或在端口 80 上运行的任何东西(net stop http)。不知何故,我仍然可以看到一些东西正在监听端口 80
我想知道这是否是导致第 7 点差异的原因?由于 windows 在端口 80 上的另一个 http 服务器上运行?
我知道这问了很多问题。相信很多刚接触 istio 和 wsl2 的人可能会有类似的疑问。希望这对其他人也有帮助。请指教。
istio - 在 istio-proxy 和 egress gateway 之间使用自定义 mTLS 发起 egress 流量的 mTLS
我们的安全部门对出口流量的要求非常严格:POD 内的每个应用程序都必须通过使用应用程序专用证书的 mTLS 身份验证 (app-proxy) 代理。他们建议使用带隧道的 squid 来处理双重 mTLS(一个用于代理,另一个用于特定流量应用程序服务器),但后来我们强制应用程序支持 ssl。Istio 可以进来做这项工作,但我们不能使用开箱即用的 ISTIO_MUTUAL 模式(在 istio-proxy 和 egress gateway 之间)。
因此,我尝试使用示例为出口流量配置双向 TLS 发起,方法是稍微修改如下(用 #- 和 #+ 标记的更改):
其中秘密已创建:
我认为这在逻辑上是正确的,但这可能不是因为我得到了错误:
附加信息(上述请求的 istio-egressgateway 日志):
- ISTIO_MUTUAL(示例 - 标准 istio 代码)
客户端 pod 日志:
出口 pod 日志:
- 自定义 MUTUAL 设置(IP:172.17.0.8 是 istio-egress POD):
客户端 pod 日志:
出口 pod 日志:
任何帮助都会很有价值,因为我自己也在为此苦苦挣扎,也许我在某个地方犯了一个逻辑错误。
编辑:至于 8443 端口号:
测试:
- 1.10
- 1.9.2
istio - 如果在入口网关应用请求身份验证,则不会转发授权标头
我正在使用 istio 1.9.4 版本,如果我将 forwardOriginalToken 添加到转发授权标头,那么我会收到错误未知字段错误 forwardOrignalToken。
如果 1.9.4 版本不支持,请告诉我。
如果我不应用请求身份验证,则身份验证标头被转发到后端。
如果此属性在 1.9.4 版本中被删除,请告诉我如何将 Authorization Header 也发送到后端。
根据我们的用例,很少有第三方组件(如 keycloak)也需要 Authorization Header。
仅供参考,我已在 istio 入口网关级别应用 RequestAuthentication 资源进行 jwt 验证。
OutputPayloadToHeader 工作正常,它解析令牌并以 base64 编码形式将有效负载发送到后端服务。
提前致谢 !