1

我想将我的 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 的情况下启动我的微服务,那么命名服务器就可以工作。

4

1 回答 1

1

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

回答以上问题

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

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

于 2020-06-15T10:35:07.640 回答