2

我使用外部数据库连接检查了如何使用Keycloak 运算符自定义资源。我使用 Google 平台的 CloudSQL 作为外部数据库源。

我的配置是

  • keycloak-idm
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  name: kiwigrid-keycloak-idm
spec:
  instances: 3
  externalAccess:
    enabled: false
  externalDatabase:
    enabled: true
  • 外部数据库存储秘密
apiVersion: v1
kind: Secret
metadata:
    name: keycloak-db-secret
    namespace: kiwios-application
type: Opaque
stringData:
    POSTGRES_DATABASE: keycloak-storage
    POSTGRES_EXTERNAL_ADDRESS: pgsqlproxy.infra
    POSTGRES_EXTERNAL_PORT: "5432"
    POSTGRES_HOST: keycloak-postgresql
    POSTGRES_USERNAME: keycloak-user
    POSTGRES_PASSWORD: S1ly3AValJYBNR-fsptLYdT74
    POSTGRES_SUPERUSER: "true"

  • 存储数据库
apiVersion: sql.cnrm.cloud.google.com/v1beta1
kind: SQLDatabase
metadata:
  name: keycloak-storage
  namespace: kiwios-application
  annotations:
    cnrm.cloud.google.com/deletion-policy: "abandon"
spec:
  charset: UTF8
  collation: en_US.UTF8
  instanceRef:
    name: keycloak-storage-instance-pg
    namespace: infra
  • 存储用户
apiVersion: sql.cnrm.cloud.google.com/v1beta1
kind: SQLUser
metadata:
  name: keycloak-user
  namespace: kiwios-application
  annotations:
    cnrm.cloud.google.com/deletion-policy: "abandon"
spec:
  instanceRef:
    name: keycloak-storage-instance-pg
    namespace: infra
  password:
    valueFrom:
      secretKeyRef:
        name: keycloak-db-secret
        key: POSTGRES_PASSWORD

以及 Kubernetes 控制台中显示的错误 错误

它不工作。任何人都请帮我弄清楚我做错了什么。

更新:我深入研究了 k9s 控制台。根据keycloak-operator功能,它为数据库连接创建一个外部名称。这是这里keycloak-postgresql

检查下面的图片 keycloak-postgresql 工作

keycloak-operator控制台中没有显示错误。只有keycloak-idm无法使用此外部名称建立连接。它显示以下错误。 错误

4

2 回答 2

2

这就是我用于 keycloak 设置的内容,如果您已经阅读了他在更新部分提到的秘密问题问题的问题

apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  selector:
    app: keycloak
  type: ClusterIP
---
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: quay.io/keycloak/keycloak:10.0.0
        env:
        - name: KEYCLOAK_USER
          value: "admin"
        - name: KEYCLOAK_PASSWORD
          value: "admin"
        - name: PROXY_ADDRESS_FORWARDING
          value: "true"
        - name: DB_VENDOR
          value: POSTGRES
        - name: DB_ADDR
          value: postgres
        - name: DB_DATABASE
          value: keycloak
        - name: DB_USER
          value: root
        - name: DB_PASSWORD
          value: password
        - name : KEYCLOAK_HTTP_PORT
          value : "80"
        - name: KEYCLOAK_HTTPS_PORT
          value: "443"
        - name : KEYCLOAK_HOSTNAME
          value : keycloak.harshmanvar.tk #replace with ingress URL
        ports:
        - name: http
          containerPort: 8080
        - name: https
          containerPort: 8443
        readinessProbe:
          httpGet:
            path: /auth/realms/master
            port: 8080

您可以尝试将 ENV 变量更改为您正在使用的密钥。

示例文件:https ://github.com/harsh4870/Keycloack-postgres-kubernetes-deployment

Keycloak 支持的环境变量:https ://github.com/keycloak/keycloak-containers/blob/master/server/README.md#environment-variables

于 2021-08-12T12:04:41.607 回答
0

你有没有试过这种方式..!

apiVersion: v1
kind: Secret
metadata:
    name: keycloak-db-secret
    namespace: kiwios-application
type: Opaque
stringData:
    POSTGRES_DATABASE: "keycloak-storage"
    POSTGRES_EXTERNAL_ADDRESS: "pgsqlproxy.infra"
    POSTGRES_EXTERNAL_PORT: "5432"
    POSTGRES_HOST: "keycloak-postgresql"
    POSTGRES_USERNAME: "keycloak-user"
    POSTGRES_PASSWORD: "S1ly3AValJYBNR-fsptLYdT74"
    POSTGRES_SUPERUSER: "true"

于 2021-12-07T08:51:50.007 回答