【发布时间】:2021-01-15 16:08:48
【问题描述】:
我有一个 nginx 入口控制器,让我们使用 helm 部署加密 + cert-manager。访问前端工作正常,问题是前端pod调用clusterIP服务上的后端pod但失败并出现块混合内容错误?
Angular 中的前端,其中 api_url: 'http://backend/api'
如果我在没有 nginx-ingress-let's encrypt 的情况下运行工作负载 > 没有问题,则调用成功。
所以我假设由于入口上的 https 和 http 客户端调用导致该错误。
我该如何解决这个问题?如果我更改了前端代码 api_url: https://backend/api,它也不会工作,因为服务上缺少 TLS 证书。
如何在前端和后端之间的 clusterIP 服务上使用 TLS??
我的前端设置为:
this.http.post<any>(`${environment.apiUrl}/auth/login`, {email, password})
在哪里apiUrl: 'http://backend/api'
我在一个容器中构建了前端并将其暴露给负载均衡器服务,我试图通过 ClusterIP 服务将它连接到端口 3000 上的后端。
前端 YAML:
apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
selector:
tier: frontend
ports:
- port: 80
targetPort: 80
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
spec:
selector:
matchLabels:
tier: frontend
replicas: 1
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: frontend
image: <Image>
imagePullPolicy: Always
ports:
- containerPort: 80
后端 YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
selector:
matchLabels:
app: app
tier: backend
replicas: 1
template:
metadata:
labels:
app: app
tier: backend
spec:
containers:
- name: frontend-container
image: <Image>
ports:
- containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
selector:
app: app
tier: backend
ports:
- protocol: TCP
port: 80
targetPort: 3000
如文档 here 中所述。
但是当我尝试从浏览器访问它时它不起作用,我收到未知错误!
这里是前端内部的屏幕截图,确保它能够在内部到达后端。
我不明白我在哪里出错了。我认为设置为 http://backend 的 apiUrl var 未正确转换,因为如果我将其更改为负载均衡器 IP 并重建映像,则将后端暴露给 LB 服务而不是 ClusterIP。它确实有效。
但显然我不想将我的后端暴露给 LB 服务。
有什么想法吗?
【问题讨论】:
标签: kubernetes