I’m trying to expose keycloak in a public domain. I have keycloak running as a pod in AKS, when I try to hit my keycloak with pod ip, it works perfectly, whereas with the gateway domain url, unable to hit keycloak.
Application Architecture:
Frontend (reactjs - calling keycloak for authentication using keycloak library) → keycloak (authenticates user and returns token) → Wso2 ( as API gateway with keycloak as key manager in it) → backend (python fastAPI)
Deployment File:
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
namespace: app
labels:
app: keycloak
spec:
replicas: 1
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
containers:
- name: keycloak-container
image: image1
imagePullPolicy: Always
command: ["/opt/keycloak/bin/kc.sh", "start"]
env:
- name: KC_PROXY
value: "edge"
- name: KC_HOSTNAME_STRICT
value: "false"
- name: KC_HTTP_ENABLED
value: "true"
- name: KC_HOSTNAME_STRICT_HTTPS
value: "true"
- name: KC_LOG_LEVEL
value: "INFO"
- name: KC_HEALTH_ENABLED
value: "true"
- name: KC_METRICS_ENABLED
value: "true"
- name: KEYCLOAK_USER
value: admin
- name: KEYCLOAK_PASSWORD
value: <password>
- name: KC_PROXY_HEADERS
value: "xforwarded"
- name: KC_HOSTNAME_URL
value: "https://xyz.net/admin"
- name: KC_HOSTNAME_ADMIN_URL
value: "https://xyx.net/admin"
- name: KC_CONTEXT_PATH
value: "/admin"
ports:
- name: http
containerPort: 8080
- name: https
containerPort: 8443
imagePullSecrets:
- name: app-secret
Ingress file:
---
# Keycloak API Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-keycloak-ingress
namespace: app
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
#nginx.ingress.kubernetes.io/cookie-based-affinity: "true"
nginx.ingress.kubernetes.io/backend-hostname: "xyz.net"
nginx.ingress.kubernetes.io/request-timeout: "120"
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/use-forwarded-headers: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: webapp-ingress
tls:
- secretName: app-og
hosts:
- xyz.net
rules:
- host: xyz.net
http:
paths:
- path: /admin(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: keycloak-service-
port:
number: 8080
# Resources (themes, assets)
- path: /admin/resources(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: keycloak-service-
port:
number: 8080
# JavaScript adapter
- path: /admin/js(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: keycloak-service-
port:
number: 8080
When I try to hit xyz.net/admin it shows " the page isn’t working .. too many redirects"