kubernetes - 从 pod 调用入口时连接被拒绝
问题描述
我在 Kubernetes 上运行 .NET 5 API 应用程序,并使用 Docker Desktop 在笔记本电脑上的单独 pod 中运行 Identity Server。这两个应用程序都可以使用 nginx 入口控制器供消费者使用。当我从集群外部调用浏览器中的入口时,它运行良好。此外,当我从 Visual Studio 运行 API 时,通过入口连接到 Identity Server 是成功的。
但是当我将 API 部署到 Kubernetes 时,运行 API 的 pod 无法连接到 ingress。API 使用入口来调用 Identity Server,因为它必须通过 https 发生。SSL 由入口终止并通过 http 将流量转发到 Pod。IdentityServer 的入口地址是https://k8s-local.com/identityserver。从 API pod,DNS 是已知的;当我执行 ping 时,一切正常。当我从 pod 对该地址执行 curl 命令时,我收到了 Connection Refused 错误:
curl: (7) Failed to connect to k8s-local.com port 443: Connection refused
如何使入口 DNS 可用于 pod?
这就是我的 ingress.yml 的样子:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
tls:
- hosts:
- k8s-local.com
secretName: local-tls
rules:
- host: k8s-local.com
http:
paths:
- pathType: Prefix
path: /identityserver/
backend:
service:
name: identityserver-service
port:
number: 5000
- pathType: Prefix
path: /customer-api/
backend:
service:
name: customer-api-service
port:
number: 5000
这是我跑步时得到的kubectl get services -n ingress-nginx
:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.109.3.50 localhost 80:31964/TCP,443:32210/TCP 11d
ingress-nginx-controller-admission ClusterIP 10.105.158.51 <none> 443/TCP 11d
并且kubectl get ingress
:
NAME CLASS HOSTS ADDRESS PORTS AGE
my-ingress <none> k8s-local.com localhost 80, 443 6d11h
解决方案
推荐阅读
- java - 使用 java 和 selenium 3 的边缘铬无头模式
- java - 对 Oracle Db 使用准备语句,违反唯一约束
- r - R用ifelse改变多列
- ios - 没有名为“FlutterPlugin”的类型或协议
- python - 如何在 python 的输出中显示我的程序代码?
- node.js - ReferenceError:未定义窗口 Angular Universal
- angular - 错误:BrowserModule 已加载。, 改为导入 CommonModule
- php - MsSql 语法quoteString 不要自动添加'N'
- gerrit - Gerrit 代码审查:有没有办法从审查中过滤掉(排除)特定文件?
- android - Android 管理 API 和 Android TV