-
Notifications
You must be signed in to change notification settings - Fork 770
Description
Describe the feature
Be able to explicitly define multiple ports I want to expose for a give deployment.
Currently the only alternative for exposing more than one port is using portDiscovery: true (doc ref), but, this has a few shortcomings:
1. can't choose exactly what ports to expose
Say I have two containers, one for my app and another with a statsd sidecar for the metric collection, with portDiscovery the ports for statsd container will also be exposed on the k8s-service and I don't want that (since from my app container I will just do: localhost:{statsd_port}).
2. can't define a port different than the targetPort
Say my app container has two ports, one for gRPC and another for HTTP, but, on the service I want to "remap" those ports to some standard while allowing the deployment to choose what port they want to use, eg:
apiVersion: v1
kind: Service
spec:
ports:
- name: http
port: 80
targetPort: 8210
protocol: TCP
- name: grpc
port: 81
targetPort: 8211
protocol: TCP
Proposed solution
Add an option to the canary spec so we can define multiple ports explicitly instead of just one, eg:
apiVersion: flagger.app/v1beta1
kind: Canary
spec:
service:
ports:
- name: http
port: 80
targetPort: 8210
- name: grpc
port: 81
targetPort: 8211
This matches the k8s service spec and solves the problem of needing port auto-discovery at all.
The only downside I can see to this is that it becomes a bit confusing to have port configurations under spec.service and under spec.service.ports, but, I think this could be useful to also deprecate the use of the port configuration both under spec.service and the spec.service.portDiscovery in favor of the new spec.service.ports.
Any alternatives you've considered?
Using portDiscovery and living with its shortcomings (both having exposed ports I don't want to expose and obligating the deployments to follow specific port standards. eg: 80 for HTTP and 81 for gRPC).