我找不到完全像这样的问题,通常这种类型的问题是错误的选择器或服务中的某些内容。数小时以来,我一直在努力应对,却找不到问题。
背景:
我正在使用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的中间件,该中间件由于未绑定端口而失败。
答案 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