kubernetes 无法在外部postgresql DB中看到keycloak表

ruarlubt  于 2023-04-11  发布在  Kubernetes
关注(0)|答案(1)|浏览(92)

我正在kubernetes minikube集群中设置Keycloak。
我以为设置工作,因为我可以使用keycloak,但当我连接到postgresql数据库,我看不到任何表。我一直在阅读类似的问题,如这个Unable to see Keycloak Tables in Postgres。在我的情况下,似乎Keycloak只连接到H2,而不是postgresql。在日志中,我看不到它做任何尝试连接到数据库中指定的yaml文件。
以下是显示它连接到H2的日志摘录:

default keycloak-7bdc548789-tknc2 keycloak 2023-04-10 02:14:15,634 TRACE [liquibase.database.core.H2Database] (main) Connected to SA@jdbc:h2:file:/opt/keycloak/bin/../data/h2/keycloakdb
default keycloak-7bdc548789-tknc2 keycloak 2023-04-10 02:14:15,634 TRACE [liquibase.database.core.H2Database] (main) Setting auto commit to false from true
default keycloak-7bdc548789-tknc2 keycloak 2023-04-10 02:14:15,634 DEBUG [org.keycloak.quarkus.runtime.storage.legacy.liquibase.QuarkusLiquibaseConnectionProvider] (main) Using changelog file META-INF/jpa-changelog-master.xml and changelogTableName DATABASECHANGELOG
default keycloak-7bdc548789-tknc2 keycloak 2023-04-10 02:14:15,635 DEBUG [liquibase.database.core.H2Database] (main) Set default schema name to PUBLIC

以下是Kubernetes yaml配置文件:
Keycloak的Yaml:

---
apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  ports:
    - name: http
      port: 8080
      targetPort: 8080
  selector:
    app: keycloak
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  replicas: 1
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
        - name: keycloak
          image: quay.io/keycloak/keycloak:21.0.2
          args: ["start-dev --log-level=TRACE"]
          env:
            - name: KEYCLOAK_ADMIN
              value: "admin"
            - name: KEYCLOAK_ADMIN_PASSWORD
              value: "admin"
            - name: KC_PROXY
              value: "edge"
            - name: DB_VENDOR
              value: "POSTGRES"
            - name: DB_ADDR
              value: "keycloak-db"
            - name: DB_DATABASE
              value: "keycloak"
            - name: KEYCLOAK_FRONTEND_URL
              value: "http://devtest-ingress.info/api/keycloak/"
            - name: DB_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-creds
                  key: user
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-creds
                  key: password
          ports:
            - name: http
              containerPort: 8080
          readinessProbe:
            httpGet:
              path: /realms/master
              port: 8080

Postgresql的Yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: keycloak-db
  replicas: 1
  template:
    metadata:
      labels:
        app: keycloak-db
    spec:
      containers:
        - name: keycloak-db
          image: postgres:13
          env:
            - name: POSTGRES_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-creds
                  key: user
            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-creds
                  key: password
            - name: POSTGRES_DB
              value: keycloak
          ports:
            - name: keycloak-db
              containerPort: 5432
          volumeMounts:
            - name: postgres-storage
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: postgres-storage
          persistentVolumeClaim:
            claimName: postgres-pvc

---
apiVersion: v1
kind: Service
metadata:
  name: keycloak-db
spec:
  selector:
    app: keycloak-db
  ports:
    - name: keycloak-db
      port: 5432
  type: ClusterIP
bhmjp9jg

bhmjp9jg1#

下面的yaml与上面的有点不同。它不工作的主要原因是环境变量在最近的keycloak版本中被更改了,下面是一个工作的yaml

---
apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  ports:
    - name: http
      port: 8080
      targetPort: 8080
  selector:
    app: keycloak
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  replicas: 1
  selector:
    matchLabels:
      app: keycloak
  template:
    metadata:
      labels:
        app: keycloak
    spec:
      containers:
        - name: keycloak
          image: quay.io/keycloak/keycloak:21.0.2
          args: ["start", "--log-level=TRACE", "--hostname-strict=false"]
          env:
            - name: KEYCLOAK_ADMIN
              value: admin
            - name: KEYCLOAK_ADMIN_PASSWORD
              value: admin
            - name: KC_DB
              value: postgres
            - name: KC_DB_URL_HOST
              value: keycloak-db
            - name: KC_PROXY
              value: edge
            - name: KC_DB_URL_DATABASE
              value: keycloak
            - name: KEYCLOAK_FRONTEND_URL
              value: http://nekonex-ingress.info/api/keycloak/
            - name: KC_DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: postgres-creds
                  key: user
            - name: KC_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-creds
                  key: password
            - name: KEYCLOAK_HOSTNAME_STRICT
              value: "false"
          ports:
            - name: http
              containerPort: 8080
          readinessProbe:
            httpGet:
              path: /realms/master
              port: 8080

相关问题