【发布时间】:2019-12-13 14:43:35
【问题描述】:
我在这里遇到了真正的障碍,到目前为止我还没有找到任何解决方案。最终,当部署到 GCP 上的 Kubernetes 集群时,我部署的 NodeJS + Express 服务器无法访问。我按照指南和示例进行操作,似乎没有任何效果。
集群、节点和服务运行良好,没有任何问题。此外,在使用 Docker 运行它时,它在本地也能正常工作。
这是我的节点 YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: 2019-08-06T04:13:29Z
generation: 1
labels:
run: nodejsapp
name: nodejsapp
namespace: default
resourceVersion: "23861"
selfLink: /apis/apps/v1/namespaces/default/deployments/nodejsapp
uid: 8b6b7ac5-b800-11e9-816e-42010a9600de
spec:
progressDeadlineSeconds: 2147483647
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
run: nodejsapp
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: nodejsapp
spec:
containers:
- image: gcr.io/${project}/nodejsapp:latest
imagePullPolicy: Always
name: nodejsapp
ports:
- containerPort: 5000
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
status:
availableReplicas: 1
conditions:
- lastTransitionTime: 2019-08-06T04:13:29Z
lastUpdateTime: 2019-08-06T04:13:29Z
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
observedGeneration: 1
readyReplicas: 1
replicas: 1
updatedReplicas: 1
服务 YAML:
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2019-08-06T04:13:34Z
labels:
run: nodejsapp
name: nodejsapp
namespace: default
resourceVersion: "25444"
selfLink: /api/v1/namespaces/default/services/nodejsapp
uid: 8ef81536-b800-11e9-816e-42010a9600de
spec:
clusterIP: XXX.XXX.XXX.XXX
externalTrafficPolicy: Cluster
ports:
- nodePort: 32393
port: 80
protocol: TCP
targetPort: 5000
selector:
run: nodejsapp
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: XXX.XXX.XXX.XXX
NodeJS 服务器配置为在端口 5000 上运行。我也尝试不进行端口转发,但结果没有差异。
非常感谢任何帮助。
更新: 我使用了本指南并按照说明进行操作:https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app
更新 2: 终于 - 想通了。我不确定为什么在任何地方都没有提到这一点,但您必须创建一个 Ingress,将流量相应地路由到 Pod。
这是示例配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/backends: '{"k8s-be-32064--abfe1f07378017e9":"HEALTHY"}'
ingress.kubernetes.io/forwarding-rule: k8s-fw-default-nodejsapp--abfe1f07378017e9
ingress.kubernetes.io/target-proxy: k8s-tp-default-nodejsapp--abfe1f07378017e9
ingress.kubernetes.io/url-map: k8s-um-default-nodejsapp--abfe1f07378017e9
creationTimestamp: 2019-08-06T18:59:15Z
generation: 1
name: nodejsapp
namespace: default
resourceVersion: "171168"
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/versapay-api
uid: 491cd248-b87c-11e9-816e-42010a9600de
spec:
backend:
serviceName: nodejsapp
servicePort: 80
status:
loadBalancer:
ingress:
- ip: XXX.XXX.XXX
【问题讨论】:
-
服务
nodejsapp健康吗?LoadBalancer需要nodejsapp中的基本路径。只有LoadBalancer接受流量。 -
服务应该是健康的,但我如何才能确保它确实是健康的呢?我在哪里检查和设置基本路径?抱歉,对 Kubernetes 还是很陌生。
-
你能在集群内点击
<podIp>:5000和nodejsapp.default.svc.cluster.local:80吗? -
不行,在尝试 curl IP 时,我无法通过。如何在集群内进行检查?
-
@jP_,通过 Google 控制台,转到
Services & Ingress,在Kubernetes Services下,选择适当的service,然后在Backend Services下,您的服务应该有一个green tick
标签: node.js docker kubernetes google-cloud-platform