×

You can route the traffic to different services that are part of a single domain through a single AWS Load Balancer. Each Ingress resource provides different endpoints of the domain.

Creating multiple ingress resources through a single AWS Load Balancer

You can route the traffic to multiple ingress resources through a single AWS Load Balancer by using the CLI.

Prerequisites
  • You have an access to the OpenShift CLI (oc).

Procedure
  1. Create an IngressClassParams resource YAML file, for example, sample-single-lb-params.yaml, as follows:

    apiVersion: elbv2.k8s.aws/v1beta1 (1)
    kind: IngressClassParams
    metadata:
      name: single-lb-params (2)
    spec:
      group:
        name: single-lb (3)
    1 Defines the API group and version of the IngressClassParams resource.
    2 Specifies the IngressClassParams resource name.
    3 Specifies the IngressGroup resource name. All of the Ingress resources of this class belong to this IngressGroup.
  2. Create the IngressClassParams resource by running the following command:

    $ oc create -f sample-single-lb-params.yaml
  3. Create the IngressClass resource YAML file, for example, sample-single-lb-class.yaml, as follows:

    apiVersion: networking.k8s.io/v1 (1)
    kind: IngressClass
    metadata:
      name: single-lb (2)
    spec:
      controller: ingress.k8s.aws/alb (3)
      parameters:
        apiGroup: elbv2.k8s.aws (4)
        kind: IngressClassParams (5)
        name: single-lb-params (6)
    1 Defines the API group and version of the IngressClass resource.
    2 Specifies the ingress class name.
    3 Defines the controller name. The ingress.k8s.aws/alb value denotes that all ingress resources of this class should be managed by the AWS Load Balancer Controller.
    4 Defines the API group of the IngressClassParams resource.
    5 Defines the resource type of the IngressClassParams resource.
    6 Defines the IngressClassParams resource name.
  4. Create the IngressClass resource by running the following command:

    $ oc create -f sample-single-lb-class.yaml
  5. Create the AWSLoadBalancerController resource YAML file, for example, sample-single-lb.yaml, as follows:

    apiVersion: networking.olm.openshift.io/v1
    kind: AWSLoadBalancerController
    metadata:
      name: cluster
    spec:
      subnetTagging: Auto
      ingressClass: single-lb (1)
    1 Defines the name of the IngressClass resource.
  6. Create the AWSLoadBalancerController resource by running the following command:

    $ oc create -f sample-single-lb.yaml
  7. Create the Ingress resource YAML file, for example, sample-multiple-ingress.yaml, as follows:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-1 (1)
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing (2)
        alb.ingress.kubernetes.io/group.order: "1" (3)
        alb.ingress.kubernetes.io/target-type: instance (4)
    spec:
      ingressClassName: single-lb (5)
      rules:
      - host: example.com (6)
        http:
            paths:
            - path: /blog (7)
              pathType: Prefix
              backend:
                service:
                  name: example-1 (8)
                  port:
                    number: 80 (9)
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-2
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/group.order: "2"
        alb.ingress.kubernetes.io/target-type: instance
    spec:
      ingressClassName: single-lb
      rules:
      - host: example.com
        http:
            paths:
            - path: /store
              pathType: Prefix
              backend:
                service:
                  name: example-2
                  port:
                    number: 80
    ---
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example-3
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/group.order: "3"
        alb.ingress.kubernetes.io/target-type: instance
    spec:
      ingressClassName: single-lb
      rules:
      - host: example.com
        http:
            paths:
            - path: /
              pathType: Prefix
              backend:
                service:
                  name: example-3
                  port:
                    number: 80
    1 Specifies the ingress name.
    2 Indicates the load balancer to provision in the public subnet to access the internet.
    3 Specifies the order in which the rules from the multiple ingress resources are matched when the request is received at the load balancer.
    4 Indicates that the load balancer will target OKD nodes to reach the service.
    5 Specifies the ingress class that belongs to this ingress.
    6 Defines a domain name used for request routing.
    7 Defines the path that must route to the service.
    8 Defines the service name that serves the endpoint configured in the Ingress resource.
    9 Defines the port on the service that serves the endpoint.
  8. Create the Ingress resource by running the following command:

    $ oc create -f sample-multiple-ingress.yaml