Service (Internal Traffic)
In short, there are three things you need to know:
- Containers in the same component will be started within a Kubernetes pod which allows these containers to communicate via
localhost. - If you want containers to communicate across components (cluster-internal traffic), you need to define services for these components.
- If you want to connect a domain to a service (external internet traffic), you need to configure an ingress for this service.
To allow other containers to access this component within the cluster-internal network (2.), you can configure the service section for the component:
containers:
- name: podinfo
image: stefanprodan/podinfo
service:
ports:
- port: 9898
Now, the component is accessible via:
[HELM_RELEASE_NAME]:9898 # podinfo:9898
ports
The ports option is mandatory and expects an array of port definitions.
port
The port option is mandatory and expect an integer with a port number. The service will be available on this port.
containerPort
The containerPort option is optional and tells the service to forward the traffic from the service port (defined in port) to a different containerPort of a pod.
Default for containerPort
containerPort: [same as `port` option]
name
The name option is optional and allows you to customize the name of the port.
Default for name
By default the port name will be "port-0", "port-1" etc.
name: port-0
nodePort
The nodePort option is optional and tells the service to expose the service at a static node port.
Applicable to NodePort service type.
protocol
The protocol option is optional and expects a string that defines the network protocol for this service port.
Default for protocol
protocol: TCP
type
The type option is optional and expects a string that defines the type of the service.
Default for type
type: ClusterIP
externalIPs
The externalIPs option is optional and expects an array of IP addresses for the service.
clusterIP
The clusterIP option is optional and expects a string that defines the cluster-internal IP address for the service.
externalName
The externalName option is optional and expects a string for ExternalName services.
externalTrafficPolicy
The externalTrafficPolicy option is optional and expects a string that defines how external traffic is routed for NodePort and LoadBalancer services.
healthCheckNodePort
The healthCheckNodePort option is optional and expects an integer for the health check node port of a LoadBalancer service.
ipFamily
The ipFamily option is optional and expects a string that defines the service IP family.
loadBalancerIP
The loadBalancerIP option is optional and expects a string with the load balancer IP address.
loadBalancerSourceRanges
The loadBalancerSourceRanges option is optional and expects an array of CIDR ranges allowed to access a LoadBalancer service.
publishNotReadyAddresses
The publishNotReadyAddresses option is optional and expects a boolean.
sessionAffinity
The sessionAffinity option is optional and expects a string.
sessionAffinityConfig
The sessionAffinityConfig option is optional and expects an object with Kubernetes service session affinity configuration.
topologyKeys
The topologyKeys option is optional and expects an array of topology keys.
name
The name option is optional and expects a string that defines the name of the service.
This is different from the top-level serviceName option, which sets the headless service name for StatefulSets. service.name controls the name of the Service resource created by this chart.
Default for name
name: [HELM_RELEASE_NAME]
labels
The labels option is optional and expects a map of additional Kubernetes labels for the service.
annotations
The annotations option is optional and expects a map of additional Kubernetes annotations for the service.