我是 K8s 的新手,这是我第一次尝试掌握它。我正在尝试使用此 deployment.yml 设置基本的 Nodejs Express API:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: api
spec:
replicas: 1
template:
metadata:
labels:
app: api
spec:
containers:
- image: registry.gitlab.com/<project>/<app>:<TAG>
imagePullPolicy: Always
name: api
env:
- name: PORT
value: "8080"
ports:
- containerPort: 8080
hostPort: 80
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
timeoutSeconds: 1
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
timeoutSeconds: 1
imagePullSecrets:
- name: registry.gitlab.com
这是通过 gitlab-ci 部署的。这是有效的,我已经设置了一个服务来公开它:
apiVersion: v1
kind: Service
metadata:
name: api-svc
labels:
app: api-svc
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: api
type: LoadBalancer
但我一直在研究入口,以便为可能的多项服务提供单一入口点。我一直在阅读 Kubernetes 指南,我也阅读了这个 Kubernetes Ingress Example这是我创建的 ingress.yml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
backend:
serviceName: api-svc
servicePort: 80
但这没有用,当我访问从入口生成的外部 IP 地址时,我只有 502 个错误页面。
谁能指出我正确的方向,我做错了什么或者我错过了什么?我在上面的示例链接中看到有一个 nginx-rc.yml,我完全像在示例中一样部署它并且创建了它,但仍然没有从端点获得任何信息。尽管可以从服务外部 IP 访问 API..
非常感谢
最佳答案
我又看了一遍,我想我明白了。
为了让 Ingress 在 GCE 上运行,您需要将后端服务定义为 NodePort
而不是 ClusterIP 或 LoadBalancer。
此外,您还需要确保对 /
的 http 健康检查有效(您会看到 Google L7 Loadbalancer 在该 url 上多次访问您的服务)然后它就可用了。
关于node.js - Kubernetes - 入口/服务/LB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41554845/