【问题标题】:Keycloak on kubernetes behind ingress doesn't work入口后面的 kubernetes 上的 Keycloak 不起作用
【发布时间】:2021-11-24 03:43:00
【问题描述】:

我在 Kubernetes 上设置 keycloak 时遇到问题。我设置了一个终止 SSL 的负载平衡器(nginx 入口控制器)。我尝试了许多不同的配置,但是当我尝试 /auth 端点时,我得到的只是 502、503 和 404 错误。这是我的 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
  namespace: default
  labels:
    app: keycloak
spec:
  replicas: 1
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
      - name: keycloak
        image: bitnami/keycloak:13.0.1-debian-10-r79
        env:
        - name: KEYCLOAK_USER
          valueFrom:
            secretKeyRef:
              name: keycloak-secret
              key: keycloak_user
        - name: KEYCLOAK_PASSWORD
          valueFrom:
            secretKeyRef:
              name: keycloak-secret
              key: keycloak_password
        - name: PROXY_ADDRESS_FORWARDING
          value: "true"
        - name: DB_VENDOR
          value: "postgres"
        - name: DB_ADDR
          value: "my.postgres.host"
        - name: DB_DATABASE
          value: "keycloak"
        - name: DB_USER
          valueFrom:
            secretKeyRef:
              name: keycloak-secret
              key: dbuser
        - name: DB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: keycloak-secret
              key: dbpassword
        - name: KEYCLOAK_LOGLEVEL
          value: "DEBUG"
        - name: KEYCLOAK_EXTRA_ARGS
          value: "-Dkeycloak.frontendUrl=https://my.keycloak.local/auth"
        ports:
          - name: http
            containerPort: 8080
          - name: https
            containerPort: 8443
---
apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  type: ClusterIP
  ports:
  - port: 8080
    name: http
    targetPort: 8080
  selector:
    app: keycloak

还有我的 ingress.yaml:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.org/server-snippets: |
      location / {
        proxy_set_header X-Forwarded-For $host;
        proxy_set_header X-Forwarded-Proto $scheme;
      }
  name: ingress
spec:
  tls:
  - hosts:
      - my.keycloak.local
  rules:
  - host: my.keycloak.local
    http:
      paths:
      - path: "/"
        pathType: Prefix
        backend:
          service:
            name: keycloak
            port:
              number: 8080

我不知道我在这里做错了什么。我在 GitHub 上就这个问题进行了一些讨论,但我仍然找不到解决方案。当我访问https://my.keycloak.local/auth 时,我提供的这个特定配置返回 404 not found。

我能说的是,这绝对是 keycloak 的问题——我用 nginx:alpine docker 镜像替换了 keycloak 镜像,一切正常——“欢迎使用 nginx!”页面加载。

如果需要,我很乐意提供更多信息。我的 kubernetes 集群在 AKS 上运行。

【问题讨论】:

  • 你能从 keycloak 发布 pod 日志并显示 http 响应吗?
  • pastebin.com/hi5E4qi7 这是您要求的日志。在我提供的这个特定配置中,nginx 为 /auth 端点返回 404。如果我将所有内容更改为通过端口 80,我会得到 502。

标签: nginx kubernetes keycloak kubernetes-ingress nginx-ingress


【解决方案1】:

好吧,在仔细阅读了 keycloak 日志之后,我的问题得到了解决。如果 pod 名称超过 23 个字符,则 keycloak 无法正常启动(即使 pod 的状态为 Running 1/1")。将 Deployment 资源更改为 StatefulSet 并选择 ServiceName 后,我的问题就消失了,keycloak 正常启动,我可以访问它。

【讨论】:

    猜你喜欢
    • 2019-03-24
    • 2021-02-08
    • 2021-12-03
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多