【问题标题】:How to deploy an eureka naming server on aks?如何在 aks 上部署 eureka 命名服务器?
【发布时间】:2020-10-04 12:15:35
【问题描述】:

我想将我的 Web 服务部署到 Azure Kubernetes 服务。我目前在一个节点中有 3 个微服务。 1 个 API 网关和 2 个后端微服务。错误信息:无。因为我没有在 API 网关中使用路由,所以我无法通过 API 网关控制我的后端微服务。现在我已经创建了一个 Eureka 命名服务器,并希望将他部署在我想使用的同一节点中,以便我的微服务可以相互通信。

这是我用于命名服务器的 Yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: discoeryservice-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: discoveryservice-front
  template:
    metadata:
      labels:
        app: discoveryservice-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
        - name: discoveryservice-front
          image: registry.azurecr.io/discoveryservice:16
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 512Mi
          ports:
          - containerPort: 8762
            name: discovery

---
apiVersion: v1
kind: Service
metadata:
  name: discoveryservice-front
spec:
  ports:
  - port: 8762
  selector:
    app: discoveryservice-front


---

首先,我没有获得外部 IP 地址,我也不知道为什么。谁能告诉我如何为我的命名服务器获取外部 IP?

这是我用于其他微服务的 Yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: apigateway-front
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apigateway-front
  template:
    metadata:
      labels:
        app: apigateway-front
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
        - name: apigateway-front
          image: registry.azurecr.io/apigateway:11
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 512Mi
          ports:
          - containerPort: 8800
            name: apigateway

---
apiVersion: v1
kind: Service
metadata:
  name: apigateway-front
spec:
  type: LoadBalancer
  ports:
  - port: 8800
  selector:
    app: apigateway-front


---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: contacts-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: contacts-back
  template:
    metadata:
      labels:
        app: contacts-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: contacts-back
        image: registry.azurecr.io/contacts:12
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 512Mi
        ports:
        - containerPort: 8100
          name: contacts-back

---
apiVersion: v1
kind: Service
metadata:
  name: contacts-back
spec:
  ports:
  - port: 8100
  selector:
    app: contacts-back
---


apiVersion: apps/v1
kind: Deployment
metadata:
  name: templates-back
spec:
  replicas: 1
  selector:
    matchLabels:
      app: templates-back
  template:
    metadata:
      labels:
        app: templates-back
    spec:
      nodeSelector:
        "beta.kubernetes.io/os": linux
      containers:
      - name: templates-back
        image: registry.azurecr.io/templates:13
        resources:
         requests:
            cpu: 100m
            memory: 128Mi
         limits:
            cpu: 250m
            memory: 512Mi
        ports:
         - containerPort: 8200
           name: templates-back
---
apiVersion: v1
kind: Service
metadata:
  name: templates-back
spec:
  ports:
  - port: 8200
  selector:
    app: templates-back

其次。有人能告诉我如何在命名服务器上注册我的微服务吗? 如果我在没有 AKS 和 Docker 的情况下启动我的微服务,那么命名服务器就可以工作。

【问题讨论】:

    标签: yaml netflix-eureka azure-aks


    【解决方案1】:

    由于您使用的是 kubernetes,建议的方法是使用 k8s 服务发现而不是 eureka 服务发现。 对于 API 网关,你可以使用任何 k8s 原生 api 网关,例如ambassador 和 kong,它们与 kubernetes 的集成非常好。

    回答以上问题

    1. 为负载均衡器类型的服务提供外部 IP(我假设外部 IP 是指可以从集群外部使用的 IP 地址)。
    2. 要注册到 eureka 服务发现,我想您需要对代码进行一些小的更改(在应用程序启动后通知 eureka 以便注册它的实例)。

    如果对以上答案有疑问,请评论,也会尝试深入解释。

    【讨论】:

    • 好的,谢谢你的回答。第 1 步对我有用。但是对于 2,我真的不确定该怎么做。我想我必须在我的微服务的 yaml 文件中设置到我的命名服务的路由,对吧?
    • 对于第二部分,这将取决于您的微服务是如何构建的?如果你正在使用一些框架,比如 spring 框架,你可以按照特定的指南来启用 eureka 服务发现(例如piotrminkowski.com/2018/04/26/…)。这将需要更改代码,并且只有 yaml 无法帮助使用 eureka 进行服务发现。但是如果你使用云原生 api 网关,你可以使用 yaml 服务进行服务发现。
    • 如果我在我的计算机上运行我的微服务,命名服务就可以工作。是的,我使用 Spring Boot,一切正常。但是,当我提供我的微服务时,我的服务没有注册。
    • 在 AKS 中,您是否向您的 Spring Boot 应用程序(在 application.properties 文件中)提供了服务注册表的信息。通过信息,我的意思是 eureka 服务的地址,以便它可以向 eureka 注册自己。在本地,由于两者都在本地运行,因此可以轻松识别。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2019-08-02
    • 2020-04-27
    • 2021-06-10
    • 2018-01-19
    • 2019-09-27
    相关资源
    最近更新 更多