kubernetes - Ingress 端点在 GKE 上显示带有响应 200 的空白页面
问题描述
作为谷歌云的新手,对 kubernetes 几乎是新手,我整个周末都在努力在 GKE 中部署我的应用程序。我的应用程序由反应前端、nodejs 后端、postgresql 数据库(通过 cloudsql-proxy 连接到后端)和 redis 组成。
我使用 Ingress 为前端和后端提供服务,一切似乎都在工作,而且我的 pod 正在运行。ingress-nginx 暴露了我的应用程序的端点,但是当我打开它时,我没有看到我的应用程序,而是看到带有 200 响应的空白页面。当我执行kubectl logs MY_POD时,我可以看到我的 react 应用程序正在运行。
入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: superflix-ingress-service
namespace: default
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/ingress.global-static-ip-name: "web-static-ip"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /*
backend:
serviceName: superflix-ui-node-service
servicePort: 3000
- path: /graphql/*
backend:
serviceName: superflix-backend-node-service
servicePort: 4000
这是我的后端:
kind: Service
apiVersion: v1
metadata:
name: superflix-backend-node-service
spec:
type: NodePort
selector:
app: app
ports:
- port: 4000
targetPort: 4000
# protocol: TCP
name: http
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: superflix-backend-deployment
namespace: default
spec:
replicas: 2
template:
metadata:
labels:
app: app
spec:
containers:
- name: superflix-backend
image: gcr.io/superflix-project/superflix-server:v6
ports:
- containerPort: 4000
# The following environment variables will contain the database host,
# user and password to connect to the PostgreSQL instance.
env:
- name: REDIS_HOST
value: superflix-redis.default.svc.cluster.local
- name: IN_PRODUCTION
value: "true"
- name: POSTGRES_DB_HOST
value: "127.0.0.1"
- name: POSTGRES_DB_PORT
value: "5432"
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-env-secrets
key: REDIS_PASS
# [START cloudsql_secrets]
- name: POSTGRES_DB_USER
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: username
- name: POSTGRES_DB_PASSWORD
valueFrom:
secretKeyRef:
name: cloudsql-db-credentials
key: password
# [END cloudsql_secrets]
# [START proxy_container]
- name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: ["/cloud_sql_proxy",
"-instances=superflix-project:europe-west3:superflix-db=tcp:5432",
"-credential_file=/secrets/cloudsql/credentials.json"]
# [START cloudsql_security_context]
securityContext:
runAsUser: 2 # non-root user
allowPrivilegeEscalation: false
# [END cloudsql_security_context]
volumeMounts:
- name: cloudsql-instance-credentials
mountPath: /secrets/cloudsql
readOnly: true
# [END proxy_container]
# [START volumes]
volumes:
- name: cloudsql-instance-credentials
secret:
secretName: cloudsql-instance-credentials
# [END volumes]
这是我的前端:
kind: Service
apiVersion: v1
metadata:
name: superflix-ui-node-service
spec:
type: NodePort
selector:
app: app
ports:
- port: 3000
targetPort: 3000
# protocol: TCP
name: http
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: superflix-ui-deployment
namespace: default
spec:
replicas: 1
template:
metadata:
labels:
app: app
spec:
containers:
- name: superflix-ui
image: gcr.io/superflix-project/superflix-ui:v4
ports:
- containerPort: 3000
env:
- name: IN_PRODUCTION
value: 'true'
- name: BACKEND_HOST
value: superflix-backend-node-service
编辑:
当我查看我的 nginx-ingress-controller 的堆栈驱动程序日志时,我有警告:
服务“default/superflix-ui”没有任何活动端点。服务“default/superflix-backend”没有任何活动端点。
解决方案
我实际上发现了问题所在。我将入口服务路径从/*更改为/,现在它运行良好。
推荐阅读
- python - 在python3中更改方法的属性
- python - Django - 装饰器限制“员工”
- c# - 无法将数据从视图传递到控制器 ASP.NET MVC 5
- netbeans - 从 Apache Ant 构建 Netbeans
- html - 如何在 display:flex 结构中的其他 2 个项目之间水平对齐文本?
- algorithm - 在无向图中查找关键连接(桥梁)。我的方法不是线性时间吗?
- php - PHP错误:未加括号的`a?乙:丙?d : e` 已弃用。使用 `(a ? b : c) ? d:e`或`a?b : (c ? d : e)`
- sql - 查找交易列表的新日期
- image - 如何在 TI-84 图形计算器上显示黑白像素图像(非 CE 版本)
- javascript - 如何从 javascript native 转储所有对象名称?