【问题标题】:Accessing local PostgreSQL instance inside Minikube访问 Minikube 中的本地 PostgreSQL 实例
【发布时间】:2021-05-13 07:04:54
【问题描述】:

我尝试以 pod 可以访问同一台机器中的 PostgreSQL 实例的方式配置我的 Minikube 集群有什么问题吗?

我已经通过 minikube ssh 访问了 Minikube 集群中的 /etc/hosts 并返回:

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中application.properties中的spring.datasource.url

然后当我尝试打印日志时,我得到了这个异常:

Caused by: java.net.UnknownHostException: service-database

【问题讨论】:

    标签: postgresql spring-boot kubernetes minikube


    【解决方案1】:

    我已经通过 minikube ssh 访问了 Minikube 集群中的 /etc/hosts 并返回

    这可能是真的,但出于同样的原因,kubernetes 不会公开其节点的/etc/hosts,minikube 也不会做同样的事情。 Kubernetes 有自己的 DNS 解析器,因此它自己的想法应该在 /etc/hosts 中(docker 做同样的事情——它同样不只是暴露主机的 /etc 而是允许用户在容器上自定义该行为发射)

    有一个正式的机制告诉 kubernetes 您希望手动管理 DNS 解析端点 -- 这就是 a Headless Service 所做的,尽管“手动”部分通常由 @987654325 完成@controller,但没有什么可以阻止其他机制整理该列表:

    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 记录

    【讨论】:

    • 这意味着当我将基础设施从 Minikube 更改为托管的 Kubernetes 集群时,我需要进行单独的配置。还有其他方法可以隔离service-database 配置吗?
    • 好吧,你不能同时拥有它:在 minikube 中工作的不变 yaml “哦,但是有一个位于集群外部的 postgres”,除非你的生产 postgresql 也以相同的机制存在于集群之外.话虽如此,我将编辑答案以尝试使更改更小
    猜你喜欢
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2021-07-16
    相关资源
    最近更新 更多