Creating IngressClassParameters, IngressClass, and Ingress Resources
Find out how to create the Kubernetes ingress-related resources that are required to use the OCI native ingress controller.
Having installed the OCI native ingress controller (either as a standalone program or as a cluster add-on), you have to create a number of different Kubernetes resources in order to use it:
IngressClassParametersresource: This custom resource specifies details of the OCI load balancer to create for the OCI native ingress controller.IngressClassresource: This resource is used to create a new load balancer. TheIngressClassresource refers to theIngressClassParametersresource for the shape of the load balancer to create, and specifies whether the OCI native ingress controller is the default controller forIngressresources.Ingressresource: This resource specifies rules to route external traffic to backend services.
Create each of the resources in turn by defining the resource in a .yaml file as shown in this topic, and then running the kubectl create command to create each resource.
Create IngressClassParameters resource
Use the custom IngressClassParameters resource to specify details of the OCI load balancer to create for the OCI native ingress controller.
Define the resource in a .yaml file. Here's a minimal example:
apiVersion: "ingress.oraclecloud.com/v1beta1"
kind: IngressClassParameters
metadata:
  name: <icp-name>
  namespace: <ns-name>
spec:
  compartmentId: "<compartment-ocid>"
  subnetId: "<subnet-ocid>"
  loadBalancerName: "<lb-name>"
  isPrivate: false
  maxBandwidthMbps: <max-bw>
  minBandwidthMbps: <min-bw>
  reservedPublicAddressId: <reserved-ip-ocid>where:
name: <icp-name>is the name of the newIngressClassParametersresourcename: <ns-name>is the name of the namespace in which to create the newIngressClassParametersresource.compartmentId: "<compartment-ocid>"is the OCID of the compartment that you want the new load balancer to belong to.subnetId: "<subnet-ocid>"is the OCID of the load balancer's subnet.loadBalancerName: "<lb-name>"is the name to give the new load balancer.maxBandwidthMbps: <max-bw>is the upper amount of bandwidth that you want the new load balancer to support during time of peak workload.minBandwidthMbps: <min-bw>is the amount of bandwidth that you want the new load balancer to always have available to provide instant readiness for workloads.reservedPublicAddressId: <reserved-ip-ocid>is optionally the OCID of an existing reserved public IP address resource to use for the load balancer. If you don't specify a reserved public IP address, the load balancer is assigned a random IP address. For more information about creating a reserved public IP address, see Creating a Reserved Public IP.
For example:
apiVersion: "ingress.oraclecloud.com/v1beta1"
kind: IngressClassParameters
metadata:
  name: native-ic-params
  namespace: acme-namespace
spec:
  compartmentId: "ocid1.compartment.oc1..aaaaaaaa______ddq"
  subnetId: "ocid1.subnet.oc1.iad.aaaaaaaa______dba"
  loadBalancerName: "native-ic-lb"
  isPrivate: false
  maxBandwidthMbps: 400
  minBandwidthMbps: 100
Create the resource by entering kubectl create -f <filename>.yaml
Create IngressClass resource
 Use the IngressClass resource to associate an Ingress resource with the OCI native ingress controller and the IngressClassParameters resource. You can also use the IngressClass resource to specify whether the OCI native ingress controller is the default controller for Ingress resources.
Define the resource in a .yaml file. Here's a minimal example:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: <ic-name>
  annotations:
    ingressclass.kubernetes.io/is-default-class: "<true|false>"
spec:
  controller: oci.oraclecloud.com/native-ingress-controller
  parameters:
    scope: Namespace
    namespace: <ns-name>
    apiGroup: ingress.oraclecloud.com
    kind: ingressclassparameters
    name: <icp-name>where:
name: <ic-name>is the name of the newIngressClassresourceingressclass.kubernetes.io/is-default-class: "<true|false>"indicates whether thisIngressClassis the defaultIngressClassto use if anIngressresource does not explicitly specify aningressClassName. It is recommended to specify a defaultIngressClass.controller: oci.oraclecloud.com/native-ingress-controllerspecifies the OCI native ingress controller as the ingress controller to usenamespace: <ns-name>is the name of the namespace containing the parameters to use when.spec.parameters.scopeis set toNamespace.name: <icp-name>is the name of theIngressClassParametersresource that specifies details of the OCI load balancer to create for the OCI native ingress controller.
For example:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: native-ic-ingress-class
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"
spec:
  controller: oci.oraclecloud.com/native-ingress-controller
  parameters:
    scope: Namespace
    namespace: acme-namespace
    apiGroup: ingress.oraclecloud.com
    kind: ingressclassparameters
    name: native-ic-params
Create the resource by entering kubectl create -f <filename>.yaml
Create Ingress resource
 Use the Ingress resource to specify rules to route external traffic to backend services.
Define the resource in a .yaml file. Here's a minimal example:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: <i-name>
spec:
  ingressClassName: <ic-name>
  rules:
    <ingress-rule>
name: <i-name>is the name of theIngressresource.ingressClassName: <ic-name>is the name of theIngressClassresource to use. TheIngressClassresource specifies both the ingress controller to use, and the name of theIngressClassParametersresource that contains details of the OCI load balancer to create for the OCI native ingress controller. IfingressClassNameis not specified, the cluster's defaultIngressClassis used (theIngressClassthat has the annotationingressclass.kubernetes.io/is-default-class: "true").<ingress-rule>is a rule optionally comprising a host and/or one (or more) path elements. Each path has a backend (a service name and port number). The ingress controller routes requests that match a rule's host name (if specified) and path to the associated backend. When specifying a path in a rule:- use 
pathType: Exactto indicate that the incoming request path must exactly match the path in the rule for the request to be routed to the rule's associated backend - use 
pathType:Prefixto indicate that the beginning portion of the incoming request path must match the path in the rule for the request to be routed to the rule's associated backend 
See Specifying Route Rules for the OCI Native Ingress Controller.
- use 
 
For example:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: native-ic-ingress
spec:
  ingressClassName: native-ic-ingress-class
  rules:
    - host: "foo.bar.com"
      http:
        paths:
          - pathType: Exact
            path: "/testecho1"
            backend:
              service:
                name: testecho1
                port:
                  number: 80
Create the resource by entering kubectl create -f <filename>.yaml