postgresql - 从 Kubernetes 访问外部数据库

标签 postgresql kubernetes digital-ocean

我有一个 kubernetes (v1.18.6),有 1 个服务(负载均衡器),开发中有 2 个 pod:

apiVersion: v1
kind: Service
metadata:
  name: app-service
spec:
  selector:
    app: app
  ports:
  - protocol: "TCP"
    port: 6000
    targetPort: 5000
  type: LoadBalancer
访问 Intenert 的网络策略(对我来说是必需的):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: internet-access
spec:
  podSelector:
    matchLabels:
      networking/allow-internet-access: "true"
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - {}
部署配置文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  progressDeadlineSeconds: 120
  selector:
    matchLabels:
      app: app
  replicas: 2
  template:
    metadata:
      labels:
        app: app
    spec:
      imagePullSecrets:
        - name: myregistrykey
      containers:
      - name: app
        image: app
        imagePullPolicy: Always
        ports:
        - containerPort: 5000
它工作正常。但是现在,我想将此图像连接到外部数据库(在另一个网络中只能通过互联网访问)。对于这个提议,我使用这个服务:
apiVersion: v1
kind: Service
metadata:
  name: postgresql
spec:
  clusterIP: None
  ports:
  - port: 25060


---
apiVersion: v1
kind: Endpoints
metadata:
  name: postgresql
subsets:
  - addresses:
        - ip: 206............
    ports:
      - port: 25060
        name: postgresql
这是所有的服务:
NAME                TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)          AGE
app-service         LoadBalancer   10.245.134.137   206...........   6000:31726/TCP   2d4h
kubernetes          ClusterIP      10.245.0.1       <none>           443/TCP          3d7h
postgresql          ClusterIP      None             <none>           25060/TCP        19h
但是当我尝试连接时,我收到数据库的超时错误,例如无法连接到数据库。
我在图像中有互联网连接。
我找到了解决方案,问题是数据库的入站规则。我必须添加Kubernetes的IP。
谢谢。

最佳答案

这是对我有用的:
定义一个服务,但设置 clusterIP: None ,因此不会创建端点。
然后使用 SAME NAME 作为您的服务自己创建一个端点,并设置您的数据库的 IP 和端口。
在您的示例中,您的端点中有一个类型:端点的名称是 postgresql 而不是 postgresSql。
我的例子:

---
service.yaml
kind: Service
apiVersion: v1
metadata:
  name: backend-mobile-db-service
spec:
  clusterIP: None
  ports:
  - port: 5984
---
kind: Endpoints
apiVersion: v1
metadata:
  name: backend-mobile-db-service
subsets:
  - addresses:
        - ip: 192.168.1.50
    ports:
      - port: 5984
        name: backend-mobile-db-service

关于postgresql - 从 Kubernetes 访问外部数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63344920/

相关文章:

ruby-on-rails - 使用Docker和Digitalocean搭建开发环境(Cloud IDE)

postgresql hstore 键/值与传统 SQL 性能对比

python - 剩余的连接槽保留用于非复制 super 用户连接

postgresql - LAB 颜色的 Postgres 空间索引?

docker - Kubernetes 部署、Pod 和容器概念

kubernetes - 超时的 Cron 作业

ubuntu - Digital Ocean Ubuntu 16.04 上的 Tilestrata 错误

postgresql - AWS Lambda 函数找不到包 - Psycopg2

kubernetes - 如何将多个 Secrets 中的所有值传递给 Kubernetes 中的 env 变量?

node.js - 在我的 Node 应用程序中使用 SSH 连接到 MongoDB