从kubernetes集群内部连接到Postgresql

从kubernetes集群内部连接到Postgresql,postgresql,kubernetes,keycloak,vmware,Postgresql,Kubernetes,Keycloak,Vmware,我设置了一系列VM192.168.2.(100105101104),其中kubernetes master在100上,两个Worker在101104上。还可以在192.168.2.105上设置postgres,但仍然无法从内部访问。在minikube的一个测试虚拟机中尝试了它,minikube和postgres安装在同一个虚拟机中,效果很好 将postgers配置文件从localhost更改为*,将pg_hba.conf上的侦听更改为0.0.0/0 在VM中安装了postgesql-12和pos

我设置了一系列VM
192.168.2.(100105101104)
,其中kubernetes master在
100
上,两个Worker在
101104
上。还可以在
192.168.2.105
上设置postgres,但仍然无法从内部访问。在minikube的一个测试虚拟机中尝试了它,minikube和postgres安装在同一个虚拟机中,效果很好

将postgers配置文件从
localhost
更改为
*
,将pg_hba.conf上的侦听更改为
0.0.0/0

在VM中安装了postgesql-12和postgresql-client-12
192.168.2.105:5432
,现在我向kubernetes添加了headless服务,如下所示

apiVersion: v1
kind: Service
metadata:
    name: my-service
spec:
    ports:
        - protocol: TCP
          port: 5432
          targetPort: 5432
------
apiVersion: v1
kind: Endpoints
metadata:
    name: my-service
subsets:
    - addresses:
        - ip: 192.168.2.105
      ports:
        - port: 5432
在我的部署中,我将定义它来访问数据库

apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  selector:
    app: keycloak
  type: LoadBalancer
---
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:11.0.0
        env:
        - name: KEYCLOAK_USER
          value: "admin"
        - name: KEYCLOAK_PASSWORD
          value: "admin"
        - name: PROXY_ADDRESS_FORWARDING
          value: "true"
        - name: DB_ADDR
          value: 'my-service:5432'
        - name: DB_DATABASE
          value: postgres
        - name: DB_PASSWORD
          value: admin
        - name: DB_SCHEMA
          value: public
        - name: DB_USER
          value: postgres
        - name: DB_VENDOR
          value: POSTGRES
        ports:
        - name: http
          containerPort: 8080
        - name: https
          containerPort: 8443
        readinessProbe:
          httpGet:
            path: /auth/realms/master
            port: 8080
虚拟机也是桥接的,而不是NAT


这里我做错了什么?

我们要做的第一件事是创建带有自定义端点的无头服务。我的解决方案中的IP仅适用于我的机器

具有服务的终结点:

apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432
---
apiVersion: v1
kind: Endpoints
metadata:
  name: postgres-service
subsets:
  - addresses:
      - ip: 192.168.2.105
    ports:
      - port: 5432
至于我的特定规范,我还没有定义任何入口或负载平衡器,因此在部署后,我将在服务中将选择器类型从负载平衡器更改为节点端口

现在,我部署了带有所提到的.yaml文件的KeyClope

apiVersion: v1
kind: Service
metadata:
  name: keycloak
  labels:
    app: keycloak
spec:
  ports:
    - name: http
      port: 8080
      targetPort: 8080
    - name: https
      port: 8443
      targetPort: 8443
  selector:
    app: keycloak
  type: NodePort
---
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:11.0.0
          env:
            - name: KEYCLOAK_USER
              value: "admin" # TODO give username for master realm
            - name: KEYCLOAK_PASSWORD
              value: "admin" # TODO give password for master realm
            - name: PROXY_ADDRESS_FORWARDING
              value: "true"
            - name: DB_ADDR
              value: # <Node-IP>:<LoadBalancer-Port/ NodePort>
            - name: DB_DATABASE
              value: "keycloak" # Database to use
            - name: DB_PASSWORD
              value: "admin" # Database password
            - name: DB_SCHEMA
              value: public
            - name: DB_USER
              value: "postgres" # Database user
            - name: DB_VENDOR
              value: POSTGRES
          ports:
            - name: http
              containerPort: 8080
            - name: https
              containerPort: 8443
          readinessProbe:
            httpGet:
              path: /auth/realms/master
              port: 8080
apiVersion:v1 种类:服务 元数据: 姓名:钥匙斗篷 标签: 应用程序:钥匙斗篷 规格: 端口: -名称:http 端口:8080 目标港:8080 -名称:https 港口:8443 目标港:8443 选择器: 应用程序:钥匙斗篷 类型:节点端口 --- apiVersion:apps/v1 种类:部署 元数据: 姓名:钥匙斗篷 名称空间:默认值 标签: 应用程序:钥匙斗篷 规格: 副本:1份 选择器: 火柴标签: 应用程序:钥匙斗篷 模板: 元数据: 标签: 应用程序:钥匙斗篷 规格: 容器: -姓名:钥匙斗篷 图片:quay.io/keydove/keydove:11.0.0 环境: -姓名:keydape_用户 值:“admin”#TODO为主域提供用户名 -名称:keydape_密码 值:“admin”#TODO为主域提供密码 -名称:代理地址转发 价值:“真实” -姓名:DB_ADDR 值:#: -名称:数据库 值:“keydove”#要使用的数据库 -名称:DB_密码 值:“admin”#数据库密码 -名称:DB_模式 价值:公众 -姓名:DB_用户 值:“postgres”#数据库用户 -名称:DB_供应商 价值:博士后 端口: -名称:http 集装箱港口:8080 -名称:https 集装箱港口:8443 readinessProbe: httpGet: 路径:/auth/realms/master 端口:8080
在提到所有可能的值之后,它成功地连接到postgres服务器,该服务器位于远离kubernetes master和workers节点的另一台服务器上

请在问题中添加其他信息。描述postgres pod和svc。更新了有关pod、部署和服务的更多详细信息。您找到解决方法了吗?是的,实际问题是无头选择器正在投影到NodePortp:nodeport,因此,我想更改keydeport本身中的环境变量“-name:DB_ADDR value:”您能否粘贴解决方案作为答案-以遵守堆栈溢出规则?