【发布时间】:2020-11-30 08:05:00
【问题描述】:
我有一个 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。
谢谢。
【问题讨论】:
-
您能否分享更多详细信息和您的配置 YAML 以用于复制目的?您的部署是否也有选择器
app: app?那里可能有错字。你用的是什么K8s版本?您有 2 个独立的集群(1 个使用 kubernetes,1 个使用 PosgreSQL)?是否可以提供日志? -
@PjoterS 嗨,是的,我更新了这个问题。
-
您有什么理由想使用
Service,而不是直接从您的应用程序/pod 中使用PostgreSQL 数据库服务器IP (206....) 和端口(25060)?此外,作为最佳实践,您可能需要考虑配置 SSL 以加密 kubernetes 集群和外部数据库服务器之间的流量 - 请参阅 postgresql.org/docs/12/ssl-tcp.html。 -
@BogdanL 但是我觉得如果直接用IP也会有同样的问题。
-
@FranciscoGonzalez 您从哪里获得了正确的 IP 地址以添加到您的入站规则中?
标签: postgresql kubernetes digital-ocean