EKS ingress
To allow external access to Feldera and other services running inside the EKS cluster, we recommend setting up a Kubernetes Ingress controller. This is useful to allow access to the Feldera Web Console or to issue REST API calls directly.
When you install an ingress controller, it uses an AWS load balancer to expose an IP address via a generated DNS name for external access. By default, creating ingress controllers leads to both an internal and external load balancer being created, with the external one being preferred to expose services. Most Feldera Enterprise users should need to expose Feldera services only over an internal load balancer.
Ingress installation
1. Ingress controller configuration file
To install an ingress controller where the external load balancer is disabled,
create a configuration values file named ingress-nginx.yaml
with the following content:
# Filename: ingress-nginx.yaml
controller:
ingressClassByName: true
ingressClassResource:
name: nginx
enabled: true
default: false # To choose this controller, an Ingress must explicitly add in its spec: ingressClassName: nginx
controllerValue: "k8s.io/ingress-nginx-internal"
service:
external:
enabled: false
internal:
enabled: true
annotations:
service.beta.kubernetes.io/aws-load-balancer-internal: "true"
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: 'true'
service.beta.kubernetes.io/aws-load-balancer-type: nlb
2. Ingress controller installation
Install the nginx Ingress controller with helm
:
helm upgrade --install --wait --timeout 2m0s ingress-nginx-internal ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx-internal --create-namespace \
-f ingress-nginx.yaml
... you can check the status afterward by running:
kubectl get pods -n ingress-nginx-internal
kubectl get services -n ingress-nginx-internal
3. Feldera ingress configuration file
Create a configuration file named ingress.yaml
with the following content:
# Filename: ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: feldera-ingress
spec:
ingressClassName: "nginx"
rules:
- http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: feldera-api-server
port:
number: 8080
4. Feldera ingress installation
Use kubectl
to install the ingress with the values configuration file:
kubectl apply -n feldera -f ingress.yaml
... you can check the status afterward by running:
kubectl get ingress -n feldera