在 Minikube 中访问本地 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

database-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: service-database
spec:
  type: ExternalName
  externalName: host.minikube.internal
  ports:
    - port: 5432
      targetPort: 5432

pod-deployment.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 环境变量指向 SpringBoot 中 spring.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 解析端点——这就是 a Headless Service 所做的,尽管通常“手动”部分是由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 记录

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?