postgresql - 访问 Minikube 中的本地 PostgreSQL 实例
问题描述
我尝试以 pod 可以访问同一台机器中的 PostgreSQL 实例的方式配置我的 Minikube 集群有什么问题吗?
我已经通过以下方式访问/etc/hosts
了 Minikube 集群内的内容minikube ssh
并返回:
127.0.0.1 localhost
127.0.1.1 minikube
192.168.99.1 host.minikube.internal
192.168.99.110 control-plane.minikube.internal
数据库服务.yaml
apiVersion: v1
kind: Service
metadata:
name: service-database
spec:
type: ExternalName
externalName: host.minikube.internal
ports:
- port: 5432
targetPort: 5432
吊舱部署.yaml
apiVersion: apps/v1
kind: Deployment
spec:
...
template:
...
spec:
containers:
- name: <container_alias>
image: <container_name>
env:
- name: DB_URL
value: "jdbc:postgresql://service-database/<database_name>"
ports:
- containerPort: 8080
注意:DB_URL
环境变量指向SpringBootspring.datasource.url
中的application.properties
。
然后当我试图打印日志时,我得到了这个异常:
Caused by: java.net.UnknownHostException: service-database
解决方案
我已经通过 minikube ssh 访问了 Minikube 集群中的 /etc/hosts 并返回
这可能是真的,但出于同样的原因,kubernetes 不会公开/etc/hosts
其节点,minikube 也不会做同样的事情。Kubernetes 有自己的 DNS 解析器,因此有自己的想法/etc/hosts
(docker 做同样的事情——它同样不只是暴露主机的/etc
,而是允许用户在容器启动时自定义该行为)
有一种正式的机制可以告诉 kubernetes 您希望手动管理 DNS 解析端点——这就是无头服务所做的,尽管通常“手动”部分由StatefulSet
控制器完成,但没有什么可以阻止其他机制整理该列表:
apiVersion: v1
kind: Service
metadata:
name: service-database
spec:
type: ClusterIP
# yes, literally the word "None"
clusterIP: None
ports:
- name: 5432-5432
port: 5432
targetPort: 5432
---
apiVersion: v1
kind: Endpoints
metadata:
name: service-database
subsets:
- addresses:
- ip: 192.168.99.1
ports:
- name: 5432-5432
port: 5432
protocol: TCP
现在内部 DNS 将解析service-database
为答案192.168.99.1
,并像正常一样填充 SRV 记录
推荐阅读
- javascript - 从 Blob 数据下载的图像不是正确的 PNG 文件
- react-native - RNPickerSelect 单元测试(改变值)
- keras - Sagemaker Keras 输出到 csv
- excel - Maatwebsite Excel无法导入汉字
- swift - 如何使用滚动视图内容偏移属性?
- wordpress - Wordpress woocommerce 贝宝交易 ID
- firebase - 从 Firestore 集合组查询中获取父母,而不检索儿子
- c++11 - C++11 -bash: ./program: 没有这样的设备
- c++ - 完全表达的定义是否存在矛盾
- python - 计算颜色数量