.net - Kubernetes Nginx Ingress TLS 网关到非 TLS 或 mTLS 的上游服务
问题描述
我有一个简单的示例应用程序,其中 ui (vue.js) 连接到支持服务 api (.dotnet core)。两者都内置在各自的 docker 镜像中,并且在不使用 TLS 时可以在 Docker 或 Kubernetes 中正常工作。当部署到 K8S 时,从 UI 到 API 的 url 映射是通过 kubernetes 服务映射完成的,即。(VUE_APP_BASE_URL = http://api-svc/api)
如果我在未启用 TLS 的情况下部署 nginx 入口,则应用程序可以正常工作。但是,当为 INGRESS 应用 TLS 时,UI 不再能够与 API 通信。我将我的 dotnet 应用 CORS 配置为 AllowAnyOrigin、AllowAnyMethod 和 AllowAnyHeader 用于测试目的。
我已经实现了 ISTIO 服务网格以允许通过 envoy 代理 sidecars 实现 mTLS,并将 nginx 入口控制器和 ui/api pod 和服务放置在带有 istio-injection=enabled 标签的命名空间中。这似乎消除了在 ui pod/container 和 api pod/container 之间手动设置 TLS 的需要。
请求没有返回任何内容。我很好奇为什么请求在请求 url 中从 http 转到 https,因为我指出它应该只是:http://api-svc/api。
这是 Kubernetes 部署的概述。
SVC and Ingress Yaml
kind: Service
apiVersion: v1
metadata:
name: api-svc
labels:
app: myapp
namespace: test
spec:
type: ClusterIP
ports:
- name: http
port: 8080
targetPort: 80
selector:
app: myapp
---
kind: Service
apiVersion: v1
metadata:
name: ui-svc
labels:
app: myapp
namespace: test
spec:
type: ClusterIP
ports:
- name: http
port: 8080
targetPort: 80
selector:
app: myapp
---
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: ui-ingress
labels:
app: myapp
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
namespace: test
spec:
rules:
- host: myapp.local
http:
paths:
- pathType: ImplementationSpecific
backend:
service:
name: ui-svc
port: 8080
tls:
- hosts:
- myapp.local
secretName: tls-secret
我正确地接近这个吗?如果是这样,我错过了什么?(可能在入口上的注释?)或者是否有更好的方法无需处理服务之间的 TLS。
谢谢
解决方案
推荐阅读
- docker - 使用nodejs mediasoup的服务器没有音频和Docker的端口绑定错误
- c - 为什么 hello world 在 C 中生成的汇编代码没有 .code 段,也没有像 x86 汇编那样的微小模型?
- windows - 如何使用 Windows Docker 容器内的 ssh 密钥克隆私有存储库?
- python - 线未显示在 scipy probplot
- web-applications - 如何在 Web 应用程序中运行 yolov4 模型?
- android - 是否可以使用扩展将属性添加到 ImageView 以通过 url 加载图像?
- amazon-web-services - 属性“vpc_id”的值不合适:需要字符串
- javascript - 使用包含检查两个数组的值
- reactjs - ReactJS:使用不同的值更新状态数组的每个元素
- python - 如何使用 pandas/python 根据条件过滤列?