当前位置: 首页 > 知识库问答 >
问题:

spring Cloud Gateway Kubernetes Eureka Java . net . unknown hostexception:无法解析

梅庆
2023-03-14

我正在开发一个微服务架构的项目。我有Spring cloud gateway,eureka service discovery和book microservice。当我在本地运行这些应用程序时,一切都正常。当我用docker compose运行这些程序时,仍然没有问题。但是当我将这些部署到kubernetes时,我在api网关上得到错误。当我向api网关上的/book发送get请求时,我得到了这个错误

api网关上的错误:

java.net.UnknownHostException: failed to resolve 'book-service-55665db7ff-bd75t' after 2 queries 
        at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:1046) ~[netty-resolver-dns-4.1.68.Final.jar!/:4.1.68.Final]
        Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
        |_ checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
        |_ checkpoint ⇢ HTTP GET "/book" [ExceptionHandlingWebHandler]

api网关配置:

server:
  port: 8084
spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
      - id: book
        uri: lb://BOOK-SERVICE/book
        predicates:
        - Path=/book/**
      - id: author
        uri: lb://BOOK-SERVICE/author
        predicates:
        - Path=/author/**
      - id: genre
        uri: lb://BOOK-SERVICE/genre
        predicates:
        - Path=/genre/**

预订微服务配置:

spring:
  application:
    name: BOOK-SERVICE
  datasource:
    url: jdbc:postgresql://localhost:5432/book_service
    username: postgres
    password: password
  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQL10Dialect
server:
  port: 8081

kubernetes清单:

#secret
apiVersion: v1
kind: Secret
metadata:
  name: database
type: Opaque
data:
  password: cGFzc3dvcmQ=
---
#api gateway
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-gateway
  labels:
    app: api-gateway
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api-gateway
  template:
    metadata:
      labels:
        app: api-gateway
    spec:
      containers:
      - name: api-gateway
        image: rikaciv802/api-gateway
        ports:
        - containerPort: 8084
        env:
        - name: eureka.client.serviceUrl.defaultZone
          value: http://service-discovery:8761/eureka
---
apiVersion: v1
kind: Service
metadata:
  name: api-gateway
spec:
  selector:
    app: api-gateway
  type: LoadBalancer
  ports:
    - protocol: TCP
      port: 8084
      targetPort: 8084
      nodePort: 30000
---
#service discovery
apiVersion: apps/v1
kind: Deployment
metadata:
  name: service-discovery
  labels:
    app: service-discovery
spec:
  replicas: 1
  selector:
    matchLabels:
      app: service-discovery
  template:
    metadata:
      labels:
        app: service-discovery
    spec:
      containers:
      - name: service-discovery
        image: rikaciv802/service-discovery
        ports:
        - containerPort: 8761
---
apiVersion: v1
kind: Service
metadata:
  name: service-discovery
spec:
  selector:
    app: service-discovery
  ports:
    - protocol: TCP
      port: 8761
      targetPort: 8761
---
#book service
apiVersion: apps/v1
kind: Deployment
metadata:
  name: book-service-database
  labels:
    app: book-service-database
spec:
  replicas: 1
  selector:
    matchLabels:
      app: book-service-database
  template:
    metadata:
      labels:
        app: book-service-database
    spec:
      containers:
      - name: book-service-database
        image: postgres:14.0
        ports:
        - containerPort: 5432
        env:
        - name: POSTGRES_DB
          value: book_service
        - name: POSTGRES_PASSWORD
          valueFrom:
            secretKeyRef:
              name: database
              key: password
---
apiVersion: v1
kind: Service
metadata:
  name: book-service-database
spec:
  selector:
    app: book-service-database
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: book-service
  labels:
    app: book-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: book-service
  template:
    metadata:
      labels:
        app: book-service
    spec:
      containers:
      - name: book-service
        image: rikaciv802/book-service
        ports:
        - containerPort: 8081
        env:
        - name: eureka.client.serviceUrl.defaultZone
          value: http://service-discovery:8761/eureka
        - name: SPRING_DATASOURCE_URL
          value: jdbc:postgresql://book-service-database:5432/book_service
        - name: SPRING_DATASOURCE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: database
              key: password
---
apiVersion: v1
kind: Service
metadata:
  name: book-service
spec:
  selector:
    app: book-service
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081

服务发现配置:

eureka:
  client:
    register-with-eureka: false
    fetch-registry: false
server:
  port: 8761

共有1个答案

桂智志
2023-03-14

看起来您对pod主机名有DNS问题。在kubernetes中,pod的DNS名称通常是这样格式化的:pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example(参见https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pods)

您可以通过使用IP地址解决此问题:将eureka.instance.preferIp地址设置为true

看到https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-eureka-server.html#spring-cloud-eureka-server-prefer-ip-address

 类似资料:
  • 问题内容: 这是我在JSP文件中的Java代码。我正进入(状态 无法解析Base64Encoder。 为什么会这样呢?我必须添加与相关的内容。任何建议将不胜感激。 问题答案: 看起来您正在使用Web应用程序中包含的jar中不存在的类。您可以尝试以下吗?如有必要,请进行调整,我只是在查看通用文档,然后将其输入- 转到http://commons.apache.org/codec/index.html

  • 问题内容: 因此,我直接从Google的android网站复制了此教程示例内容,却收到一个错误,指出R.id无法解决。 这是我的Java文件 这是我的 问题答案: 您必须导入您的R类 同样,如需求发布一样,您必须为布局使用名称空间。

  • 问题内容: 之前一切正常。然后,我碰巧将一个新的xml文件添加到布局中。现在,当setContentView指向(R.layout.menu)时,我的一个类给出了错误。Eclipse告诉我R.layout.menu无法解析。我不知道为什么。我在布局文件夹中定义了一个称为菜单的布局。 有什么建议? 问题答案: 您是否执行过项目>清洁?有时,您只需要让Eclipse重新生成R文件即可。

  • 问题内容: 我是一个Java新手,因此遇到了这个问题。我尝试解码Json,为了做到这一点,我想导入这些包: “无法解决导入问题” …这些软件包是否不再可用,或者我是否需要做其他事情才能使它们起作用? 提前感谢。 问题答案: 可能您的简单json.jar文件不在您的类路径中。

  • 重命名应用程序包名称后,Android Studio显示此错误 我尝试过的事情: 清洁项目 清理Android Studio缓存 清除分级缓存 重新安装的IDE 文件->使缓存无效/重新启动 我使用了 截图

  • 我正在尝试将我的应用程序迁移到AndroidX,遵循官方文件。我运行refactor选项:migrate to androidx。 一开始,我有错误,通过重新启动和清理我的项目来解决。然后我遇到了一个问题(参见这个堆栈溢出问题),我通过将gradle构建工具降级到3.1.3来解决这个问题。 但现在我正在纠结于数据绑定。迁移工具替换了所有我的 由 但我有错误信息