【问题标题】:.NetCore app in AKS can't be accessed via public IP无法通过公共 IP 访问 AKS 中的 .NetCore 应用
【发布时间】:2020-09-06 18:22:06
【问题描述】:

我找不到任何类似的问题,通常这种类型的问题是选择器不正确或服务中的某些问题。几个小时以来我一直在努力解决这个问题,但找不到问题。

背景:

我正在使用 Azure Pipeline 构建解决方案,将其容器化并将其推送到 Azure Container Registry。该解决方案包含一个 .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,由于端口未绑定而失败。

【问题讨论】:

  • 请考虑添加解决方案作为答案,而不是作为初始问题的编辑

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


【解决方案1】:

要允许 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

【讨论】:

    猜你喜欢
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 2021-03-01
    • 2012-05-02
    • 2020-02-02
    • 1970-01-01
    相关资源
    最近更新 更多