我在Azure Kubernetes服务上的外部IP无法正常工作

时间:2019-10-22 10:45:42

标签: azure kubernetes azure-aks

我已经在Azure上创建了一个kubernetes集群。我已经在没有前端(微服务)的地方部署了一些Pod。

我已经使用Postman和VS Code在本地进行了测试:这些微服务返回200 O或500。

问题在于,在Kubernetes中我正确地拥有了外部IP,但是我无法从外部进行访问。

我还有另一个Mongo容器,我可以毫无问题地访问它。我留下了一些图像以尝试解决:

enter image description here enter image description here

你能帮我吗?谢谢!

4 个答案:

答案 0 :(得分:1)

Kubernetes比简单的Docker容器要复杂一点,因此一开始运行它可能会引起混淆。我将解释在哪些点上需要配置服务公开。

每个容器都有自己的IP地址空间,因此每个容器可以为应用程序使用相同的端口。在您的情况下,您可能需要使用端口6060。这是应用程序需要绑定到的端口,并且在所有网络接口(ip 0.0.0.0)上都可以从外部访问。这是您将在dockerfile中声明为EXPOSE的端口。

在本地测试时,您可以将每个容器映射到不同的本地端口进行测试:docker run -p external-port:internal-port

用于EXPOSE的端口是您在Pod或Deployment中配置为containerPort的端口。

一个或多个Pod使用服务在kubernetes中作为负载平衡服务公开。在那里,您可能希望将请求端口(通常为80)映射到容器端口(对于您的情况是6060)。

然后可以使用LoadBalancer在外部公开该服务。 LoadBalancer的外部IP将映射到您的服务的(虚拟IP),该服务将请求端口映射到容器端口,并使用选择器选择适当的容器。该容器包含一个在容器端口上侦听的容器,然后回复您的请求。

必须正确配置整个链条才能正常工作。保持简单(不为每个应用程序使用不同的端口)可以更轻松地实现目标。

答案 1 :(得分:0)

您是否尝试打过

这样的restApi URI
ExternalIP:Port/uri

这应该可以访问,我也将这种方法与AKS一起使用

答案 2 :(得分:0)

正如我从您的问题和评论中的YAML文件中看到的那样,我认为可能的原因是您在部署容器中设置了该命令,该命令将覆盖映像中的默认命令。因此,我怀疑您的应用程序无法启动,可以进行检查。

我还将建议您检查暴露在外部的端口是否与图像中的端口相同。

答案 3 :(得分:0)

我已经能够解除这四个微服务之一。

我试图用相同的YAML(更改图像URL和端口)取消其余三个微服务,但它们不起作用。

使用的YAML是这样的:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: permissions
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: permissions
    spec:
      containers:
      - name: permissions
        image: URL IMAGE
        ports:
        - containerPort: 6060
      imagePullSecrets:
      - name: nameimage
---
apiVersion: v1
kind: Service
metadata:
  name: permissions
spec:
  type: LoadBalancer
  ports:
  - port: 6060
  selector:
    app: permissions

我添加了此信息以设置其他微服务的资源限制:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: users
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: users
    spec:
      containers:
      - name: users
        image: URL IMAGE
        resources:
          requests:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 6061
---
apiVersion: v1
kind: Service
metadata:
  name: users
spec:
  type: LoadBalancer
  ports:
  - port: 6061
  selector:
    app: users

正如我所说,我只能举起第一个。

有帮助吗?

谢谢!