Skip to content

Question on active healthchecking to an internal service using an BackendTrafficPolicy #4863

Description

@mckornfield

Description:
Let's say I have an HTTP Route and BackendTrafficPolicy that look like the following

apiVersion: gateway.envoyproxy.io/v1alpha1
kind: BackendTrafficPolicy
metadata:
  name: my-app
  namespace: my-app
spec:
  hostnames:
  - api-external.cloud
  parentRefs:
  - group: gateway.networking.k8s.io
    kind: Gateway
    name: cloud
    namespace: cloud
  rules:
  - backendRefs:
    - group: ""
      kind: Service
      name: my-app
      port: 8000
      weight: 1
    matches:
    - path:
        type: Exact
        value: /healthcheck
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  annotations:
    meta.helm.sh/release-name: my-app
    meta.helm.sh/release-namespace: my-app
  name: my-app
  namespace: my-app
spec:
  hostnames:
  - api-external.cloud
  parentRefs:
  - group: gateway.networking.k8s.io
    kind: Gateway
    name: cloud
    namespace: cloud
  rules:
  - backendRefs:
    - group: ""
      kind: Service
      name: my-app
      port: 8000
      weight: 1
    matches:
    - path:
        type: PathPrefix
        value: /v1/my-app

When I debug the generated config within envoy gateway, I see the following

"health_checks": [
       {
        "timeout": "5s",
        "interval": "5s",
        "unhealthy_threshold": 1,
        "healthy_threshold": 2,
        "http_health_check": {
         "host": "api-external.cloud",
         "path": "/healthcheck",
         "expected_statuses": [
          {
           "start": "200",
           "end": "201"
          }
         ],
         "method": "GET"
        }
       }
      ],

And it leads to an error since the path /healthcheck is not exposed externally. I have a handful of questions

  1. Shouldn't envoy be able to look up this cluster locally instead of having to healthcheck through the host?
  2. If this is expected, is the expected workaround to expose an HTTPRoute/healthcheck publicly so that it can be accessed via envoy at this host?

[optional Relevant Links:]
Trying to follow: https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/health_checking
And: https://gateway.envoyproxy.io/v0.6/design/backend-traffic-policy/

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions