×

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

Creating multiple ingresses through a single AWS Load Balancer

You can route the traffic to multiple Ingresses through a single AWS Load Balancer (ALB) 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 name of the IngressClassParams resource.
    3 Specifies the name of the IngressGroup. All Ingresses of this class belong to this IngressGroup.
  2. Create an IngressClassParams resource by running the following command:

    $ oc create -f sample-single-lb-params.yaml
  3. Create an 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 name of the IngressClass.
    3 Defines the controller name. ingress.k8s.aws/alb denotes that all Ingresses 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 name of the IngressClassParams resource.
  4. Create an IngressClass resource by running the following command:

    $ oc create -f sample-single-lb-class.yaml
  5. Create an 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 an AWSLoadBalancerController resource by running the following command:

    $ oc create -f sample-single-lb.yaml
  7. Create an 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 name of an ingress.
    2 Indicates the load balancer to provision in the public subnet and makes it accessible over the internet.
    3 Specifies the order in which the rules from the Ingresses are matched when the request is received at the load balancer.
    4 Indicates the load balancer will target OpenShift nodes to reach the service.
    5 Specifies the Ingress Class that belongs to this ingress.
    6 Defines the name of a domain used for request routing.
    7 Defines the path that must route to the service.
    8 Defines the name of the service that serves the endpoint configured in the ingress.
    9 Defines the port on the service that serves the endpoint.
  8. Create the Ingress resources by running the following command:

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