当前位置: 首页 > 知识库问答 >
问题:

配置istio后访问服务健康检查端口

蒋骏
2023-03-14

因此,我们正在使用全局MTL部署istio 1.0.2,目前进展顺利。对于健康检查,我们为服务添加了单独的端口,并根据文档进行了配置:

https://istio.io/docs/tasks/traffic-management/app-health-check/#mutual-tls-is-enabled

我们的应用程序端口现在位于 8080 上,运行状况检查端口位于 8081 上。完成此操作后,Kubernetes能够进行运行状况检查,并且服务似乎运行正常。

但是,我们的监控解决方案无法触及运行状况检查端口。

监控应用程序也位于kubernetes中,目前在网格之外。上述文件说:

由于Istio代理仅拦截在containerPort字段中显式声明的端口,因此无论是否启用Istio双向TLS,8002端口的流量都会绕过Istio服务器。e

这就是我们如何配置它的。所以在我们的例子中,8081应该在网格之外:

livenessProbe:
  failureThreshold: 3
  httpGet:
    path: /manage/health
    port: 8081
    scheme: HTTP
  initialDelaySeconds: 180
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1
name: <our-service>
ports:
- containerPort: 8080
  name: http
  protocol: TCP
readinessProbe:
  failureThreshold: 3
  httpGet:
    path: /manage/health
    port: 8081
    scheme: HTTP
  initialDelaySeconds: 10
  periodSeconds: 10
  successThreshold: 1
  timeoutSeconds: 1

但是,我们无法从网格外的另一个吊舱访问8081。

例如:

curl http://<our-service>:8081/manage/health
curl: (7) Failed connect to <our-service>:8081; Connection timed out

如果我们从网格内的另一个pod尝试,istio会抛回404,这可能是意料之中的。

我试图像这样玩目的地规则:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: <our-service>-health
spec:
  host: <our-service>.namepspace.svc.cluster.local
  trafficPolicy:
    portLevelSettings:
    - port:
        number: 8081
      tls:
        mode: DISABLE

但这只会扼杀所有与服务的连接,包括内部连接和通过入口网关的连接。

共有1个答案

东郭鹤龄
2023-03-14

根据Istio官方文档,端口8081将无法通过Istio Envoy,因此服务网格之外的其他Pod将无法访问,因为Istio代理仅确定通过Pod服务传输的<code>containerPort

如果您在Pod之间构建不带TLS身份验证的Istio服务网状网络,则可以选择使用相同的端口作为到Pod服务的基本网络路由和就绪性/活性探测。

但是,如果将端口8001用于常规流量和活动性探测,则在启用双向TLS时,健康检查将失败,因为HTTP请求是从Kubelet发送的,而Kubelet不会向活动性HTTP服务发送客户端证书。

假设Istio Mixer提供了三个Prometheusendpoint,您可以考虑使用Prometheus作为主要监控工具,以收集和分析网格指标。

 类似资料:
  • 我有一个带有2个主机的consur堆栈(用于测试)。1台主机仅在引导模式下运行consur,另一台主机在注册器下运行客户端模式,用于自动注册服务(均在docker上运行)。现在,如果我启动一个应用程序(例如8080端口)容器,注册器将检测并将其注册到Consor,但它没有我想要的http检查。我发现Registrator有自动注册健康检查的选项是将SERVICE\u 8080\u check\u

  • SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例 引入健康检查扩展 要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可: <dependency> <groupId>com.alipay

  • 健康检查配置概述。 filter.http.HealthCheck filter.http.HealthCheck proto { "pass_through_mode": "{...}", "endpoint": "...", "cache_time": "{...}" } pass_through_mode (BoolValue, REQUIRED) 指定过滤器是否在传递模式下运

  • 健康检查架构概述。如果为集群配置了健康检查,则会发出相应的统计信息。详见请参考统计相关文档。 HealthCheck HealthCheck.Payload HealthCheck.HttpHealthCheck HealthCheck.TcpHealthCheck HealthCheck.RedisHealthCheck HealthCheck HealthCheck proto { "ti

  • 健康检查架构概述。 如果为集群配置了健康检查,则会发出相应的统计信息。并且记录在这里。 { "type": "...", "timeout_ms": "...", "interval_ms": "...", "unhealthy_threshold": "...", "healthy_threshold": "...", "path": "...", "send": [

  • 健康检查配置概述。 { "name": "health_check", "config": { "pass_through_mode": "...", "endpoint": "...", "cache_time_ms": "..." } } pass_through_mode (required, boolean) 指定过滤器是否在通过模式下运行。 end