kubernetes - 502 带有 Kubernetes 入口的错误网关
问题描述
我有一个 kubernetes 设置,配置如下:
#---
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
selector:
app: my-service
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8080
# Port to forward to inside the pod
targetPort: 80
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-service
spec:
replicas: 1
template:
metadata:
labels:
app: my-service
spec:
containers:
- name: my-service
image: my-custom-docker-regisry/my-service:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
imagePullSecrets:
- name: regcred
和我的入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
rules:
- http:
paths:
- path: /myservice
backend:
serviceName: myservice
servicePort: 80
我试图做的是从我的 docker 注册表中提取图像并在 kubernetes 中运行它。我在这里配置了一个部署和一个服务,并通过入口将服务暴露给外部。
我的 minikube 在 ip 192.168.99.100 下运行,当我尝试使用地址访问我的应用程序时:curl 192.168.99.100:80/myservice,我得到 502 Bad Gateway。
有谁知道它为什么会发生,或者我的配置有问题吗?提前谢谢你!
解决方案
您的入口针对此服务:
serviceName: myservice
servicePort: 80
但是名为的服务myservice
暴露了端口8080
而不是80
:
ports:
- protocol: "TCP"
# Port accessible inside cluster
port: 8080
# Port to forward to inside the pod
targetPort: 80
您的入口应指向服务公开的端口之一。
此外,服务本身以端口 80 为目标,但您部署中的 pod 似乎公开了端口 8080,而不是 80:
containers:
- name: my-service
image: my-custom-docker-regisry/my-service:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
长话短说,看起来你可以在你的port
这样交换:targetPort
service
- 豆荚暴露端口
8080
- 该服务公开了服务名称port
8080
下所有 pod 的端口,myservice
80
- 入口将 nginx 配置为将您的流量代理到服务
myservice
端口80
。
推荐阅读
- javascript - Firebase - IN查询在where子句中不起作用,结果是空白数组
- java - 根据其他列表中的匹配对象更新列表中两个对象的属性
- python - 熊猫数据框。聚合列取决于另一列中的值
- reactjs - 单击后如何更改 React js 上的按钮材质 UI 标签的颜色?
- sql - SQL 使用 Select 语句匹配来自 2 个不同表的列
- python - Django:如何切换两个对象之间的关系
- angular - 如何防止 Angular Material DatePicker 切换月份和日期?
- java - 有没有办法用重复的 if-then 模式来简化代码?
- java - Android:由于活动无法获得焦点而被 Android 杀死的活动
- c# - 原始字符串重复多少次后?