Hello!
I try to make working my grpc service under service mesh with custom ingress service.
We use as ingress customly deployed traefik with Consul provider.
I have some grpc service:
job "my-grpc-service" {
type = "service"
group "my-grpc-service" {
count = 1
task "my-grpc-service" {
driver = "docker"
shutdown_delay = "3s"
config {
image = "[[ .image_tag ]]"
}
env {
ConnectionStrings__Redis = "${NOMAD_UPSTREAM_ADDR_my_redis}"
}
}
service {
name = "my-grpc-service"
port = 8080
check {
type = "grpc"
address_mode = "alloc"
interval = "10s"
timeout = "2s"
expose = true
name = "grpc-health-check"
}
tags = [
"traefik.enable=true",
"traefik.consulcatalog.connect=true",
"traefik.http.routers.my-grpc-service.rule=Host(`my-grpc-service.my-domain`)",
"traefik.http.routers.my-grpc-service.entrypoints=https",
"traefik.http.services.my-grpc-service.loadbalancer.server.scheme=h2c"
]
connect {
sidecar_service {
proxy {
config {
protocol = "grpc"
}
expose {
path {
path = "/metrics"
protocol = "http"
local_path_port = 9090
listener_port = "service_metrics"
}
}
upstreams {
destination_name = "my-redis"
local_bind_port = 6379
}
}
}
}
}
service {
name = "my-grpc-service-metrics"
port = "service_metrics"
check {
type = "http"
path = "/metrics"
interval = "10s"
timeout = "2s"
method = "HEAD"
}
tags = ["prometheus-metrics"]
}
network {
mode = "bridge"
port "service_metrics" {
to = 9090
}
}
}
group "my-redis" {
count = 1
task "my-redis" {
driver = "docker"
config {
image = "redis:8.2.1-alpine"
force_pull = false
}
}
service {
name = "my-redis"
port = 6379
connect {
sidecar_service {
proxy {}
}
}
}
network {
mode = "bridge"
}
}
}
I’m trying to call service via traefik and url https://my-grpc-service.my-domain. But I receive error:
HTTP/2 200
content-type: application/grpc
date: Thu, 04 Sep 2025 12:18:13 GMT
grpc-message: upstream connect error or disconnect/reset before headers. reset reason: remote reset
grpc-status: 14
server: envoy
content-length: 0
Before I added service.connect.sidecar_service.proxy.config.protocol my service responded that I using http1 instead of htt2.
What I am doing wrong?