无法通过公共IP访问AKS中的.NetCore应用

时间:2020-05-20 11:40:10

标签: kubernetes .net-core azure-pipelines azure-kubernetes azure-container-registry

我找不到完全像这样的问题,通常这种类型的问题是错误的选择器或服务中的某些内容。数小时以来,我一直在努力应对,却找不到问题。

背景:

我正在使用Azure管道来构建解决方案,将其容器化并将其推送到Azure容器注册表。该解决方案包含一个.net核心控制台应用程序,该应用程序只是未更改的模板(天气预报的模板)。然后,我使用kubectl apply创建部署和LoadBalancer服务(我没有使用管道发布到AKS,而是AKS从ACR中提取了信息。)

应用运行正常。日志显示它们启动并监听正确的端口。为该服务分配了公共IP。击中IP超时。

我可以在Azure中看到LoadBalancer和所有PublicIPAddresses。它们似乎都已正确配置。在控制台中,我可以看到该服务已映射到特定的Pod(因此选择器正在工作)。

同时:

我应用了hello-kubernetes示例应用程序。这基本上与我的设置相同,并且工作正常。

我区分了服务和部署的清单(将我的清单与hello-kubernetes进行了比较),它们不同于guid和名称。

我拆除了整个kubernetes集群,并创建了一个新集群。结果相同。

我删除了服务并重新创建了服务,并获得了一个新的公共IP。结果相同。

我尝试了http和https。

这是清单:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
  labels:
    app: api
spec:
  replicas: 1
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
      - name: api
        image: someimage:1.0.52
        ports:
        - containerPort: 5001
        - containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 5001
  selector:
    app: api
---

请告诉我此清单明显有问题!

[更新] 我添加了一个中间件,当有请求传入时,该中间件会吐出一个控制台行。事实证明,请求正在进入应用程序并得到处理,但浏览器/邮递员仍然超时。

[已解决]

问题在于默认的.NetCore应用程序具有将http重定向到https的中间件,该中间件由于未绑定端口而失败。

1 个答案:

答案 0 :(得分:0)

要允许Kubernetes打开两个端口并将其添加到Azure负载均衡器,可以将第二个端口添加到Kubernetes服务

apiVersion: v1
kind: Service
metadata:
  name: api
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 5001
  - port: 443
    targetPort: 5443
  selector:
    app: api

这将允许外部服务同时访问HTTP和HTTPS

相关问题