Note
|
This feature is only supported in non-cloud deployments. For cloud (GCE, AWS, and OpenStack) deployments, load Balancer services can be used to automatically deploy a cloud load balancer to target the service’s endpoints. |
Cluster administrators can assign a unique external IP address to a service. If routed correctly, external traffic can reach that service’s endpoints via any TCP/UDP port the service exposes. This can be simpler than having to manage the port space of a limited number of shared IP addresses when manually assigning external IPs to services.
There is support for both automatic and manual assignment of IP addresses, and each address is guaranteed to be assigned to a maximum of one service. This ensures that each service can simply expose its chosen ports regardless of the ports exposed by other services.
To use an ExternalIP, you can:
-
Select an IP address from the ExternalIPNetworkCIDRs range.
-
Have an IP address assigned from a pool. In this case, {product-title} implements a non-cloud version of the LoadBalancer service type and assigns IP addresses to the services.
CautionYou must ensure that the IP address pool you assign terminates at one or more nodes in your cluster. You can use the existing
oadm ipfailover
to ensure that the external IPs are highly available.
For manually-configured external IPs, potential port clashes are handled on a first-come, first-served basis. If you request a port, it is only available if it has not yet been assigned for that IP address. For example:
Two services have been manually configured with the same external IP address of 172.7.7.7.
MongoDB service A
requests port 27017, and then
MongoDB service B
requests the same port; the first request gets the port.
However, port clashes are not an issue for external IPs assigned by the ingress controller, because the controller assigns each service a unique address.
Note
|
Ingress IPs can only be assigned if the cluster is not running in the cloud. In cloud environments, LoadBalancer-type services configure cloud-specific load balancers. |
In non-cloud clusters, ingressIPNetworkCIDR
is set by default to 172.46.0.0/16
. You could use the default if
your cluster environment is not already using this private range. However, if you want to use a different range, then before you assign an ingress IP you must set ingressIPNetworkCIDR
in the /etc/origin/master/master-config.yaml file, then restart the master service.
networkConfig: ingressIPNetworkCIDR: 172.46.0.0/16
To assign an ingress IP:
-
Create a YAML file for a LoadBalancer service that requests a specific IP via the
loadBalancerIP
setting:Example 3. Sample LoadBalancer ConfigurationapiVersion: v1 kind: Service metadata: name: egress-1 spec: ports: - name: db port: 3306 loadBalancerIP: 172.46.0.1 type: LoadBalancer selector: name: my-db-selector
-
Create a LoadBalancer service on your pod:
$ oc create -f loadbalancer.yaml
-
Check the service for an external IP. For example, for a service named
myservice
:$ oc get svc myservice
When your LoadBalancer-type service has an external IP assigned, the output displays the IP:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE myservice 172.30.74.106 172.46.0.1 3306/TCP 30s