how to use ALB Ingress with api networking.k8s.io/v1 in EKS

2/25/2021

Previously I was using the extensions/v1beta1 api to create ALB on Amazon EKS. After upgrading the EKS to v1.19 I started getting warnings:

Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress

So I started to update my ingress configuration accordingly and deployed the ALB but the ALB is not launching in AWS and also not getting the ALB address.

Ingress configuration -->

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "pub-dev-alb"
  namespace: "dev-env"
  annotations:
    kubernetes.io/ingress.class: "alb"
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip

spec:
  rules:
  - host: "dev.test.net"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: "dev-test-tg"
            port:
              number: 80

Node port configuration -->

apiVersion: v1
kind: Service
metadata:
  name: "dev-test-tg"
  namespace: "dev-env"
spec:
  ports:
    - port: 80
      targetPort: 3001
      protocol: TCP
  type: NodePort
  selector:
    app: "dev-test-server"

Results --->

enter image description here

Used this documentation to create ALB ingress controller.

Could anyone help me on here?

-- Mohamed Jawad
amazon-eks
amazon-elb
kubectl
kubernetes
kubernetes-ingress

1 Answer

6/4/2021

Your ingress should work fine even if you use newest Ingress. The warnings you see indicate that a new version of the API is available. You don't have to worry about it.

Here is the explanation why this warning occurs, even if you you use apiVersion: networking.k8s.io/v1:

This is working as expected. When you create an ingress object, it can be read via any version (the server handles converting into the requested version). kubectl get ingress is an ambiguous request, since it does not indicate what version is desired to be read.

When an ambiguous request is made, kubectl searches the discovery docs returned by the server to find the first group/version that contains the specified resource.

For compatibility reasons, extensions/v1beta1 has historically been preferred over all other api versions. Now that ingress is the only resource remaining in that group, and is deprecated and has a GA replacement, 1.20 will drop it in priority so that kubectl get ingress would read from networking.k8s.io/v1, but a 1.19 server will still follow the historical priority.

If you want to read a specific version, you can qualify the get request (like kubectl get ingresses.v1.networking.k8s.io ...) or can pass in a manifest file to request the same version specified in the file (kubectl get -f ing.yaml -o yaml)

You can also see a similar question.

-- Mikołaj Głodziak
Source: StackOverflow