Description
Welcome!
- Yes, I've searched similar issues on GitHub and didn't find any.
- Yes, I've searched similar issues on the Traefik community forum and didn't find any.
What version of the Traefik's Helm Chart are you using?
26.0.0
What version of Traefik are you using?
2.10.6
What did you do?
Installed the Helm chart with;
ports:
websecure:
http3:
enabled: true
advertisedPort: 443
This results in a Deployment configured as;
# ...
ports:
# ...
- containerPort: 8443
name: websecure
protocol: TCP
- containerPort: 8443
name: websecure-http3
protocol: UDP
And a service like;
# ...
ports:
# ...
- name: websecure
port: 443
protocol: TCP
targetPort: websecure
- name: websecure-http3
port: 443
protocol: UDP
targetPort: websecure-http3
What did you see instead?
This configuration unfortunately seems to run into kubernetes/kubernetes#105610 on helm upgrade
s, causing the two ports to merge into one - with the first websecure winning and removing the UDP port from existence.
The resulting deployment looks like;
# ...
ports:
# ...
- containerPort: 8000
name: web
protocol: TCP
- containerPort: 8443
name: websecure
protocol: TCP
And the service ends up as;
# ...
ports:
# ...
- name: websecure
port: 443
protocol: TCP
targetPort: websecure
- name: websecure-http3
port: 443
protocol: UDP
targetPort: websecure-http3
This causes the incoming service traffic to fail as there's no websecure-http3
port to reference
What is your environment & configuration?
Bare-metal Kubernetes.
Traefik installed from Helm chart using FluxCD.
helm-controller: v0.31.1
kustomize-controller: v0.35.0
notification-controller: v0.33.0
source-controller: v0.36.0
Additional Information
To keep the deployment working for now, I've added a post-renderer which replaces the service definition for the HTTP3 port to point directly to the port number instead of referring to it by name.
As a note, the template that the Helm Chart renders is correct.
The issue is that Kubernetes API server unfortunately messes up the port list when applying upgrades - for at least certain setups, and since the service object the Helm chart renders refers to the ports by name this means that one of the HTTPS/HTTP3 ports ends up unable to be routed to. (Depending on which one gets lost by the API server merge)