Docker 部署吊舱无法连接群集IP服务
我尝试使用入口暴露我的服务器IP 服务器是一个Express.js应用程序。它在听http://localhost:5000 在没有docker的情况下进行本地操作 以下是我的Kubernetes配置文件: 服务器部署。yamlDocker 部署吊舱无法连接群集IP服务,docker,kubernetes,yaml,minikube,Docker,Kubernetes,Yaml,Minikube,我尝试使用入口暴露我的服务器IP 服务器是一个Express.js应用程序。它在听http://localhost:5000 在没有docker的情况下进行本地操作 以下是我的Kubernetes配置文件: 服务器部署。yaml apiVersion: v1 apiVersion: apps/v1 kind: Deployment metadata: name: server-deployment spec: replicas: 1 selector: matchLabels
apiVersion: v1
apiVersion: apps/v1
kind: Deployment
metadata:
name: server-deployment
spec:
replicas: 1
selector:
matchLabels:
component: server
template:
metadata:
labels:
component: server
spec:
containers:
- name: server
image: hongbomiao/hongbomiao-server:latest
ports:
- containerPort: 5000
env:
- name: NODE_ENV
value: development
kind: Service
metadata:
name: server-cluster-ip-service
spec:
type: ClusterIP
selector:
component: server
ports:
- port: 5000
targetPort: 5000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: server-cluster-ip-service
port:
number: 5000
服务器群集ip服务.yaml
apiVersion: v1
apiVersion: apps/v1
kind: Deployment
metadata:
name: server-deployment
spec:
replicas: 1
selector:
matchLabels:
component: server
template:
metadata:
labels:
component: server
spec:
containers:
- name: server
image: hongbomiao/hongbomiao-server:latest
ports:
- containerPort: 5000
env:
- name: NODE_ENV
value: development
kind: Service
metadata:
name: server-cluster-ip-service
spec:
type: ClusterIP
selector:
component: server
ports:
- port: 5000
targetPort: 5000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: server-cluster-ip-service
port:
number: 5000
入口服务。yaml
apiVersion: v1
apiVersion: apps/v1
kind: Deployment
metadata:
name: server-deployment
spec:
replicas: 1
selector:
matchLabels:
component: server
template:
metadata:
labels:
component: server
spec:
containers:
- name: server
image: hongbomiao/hongbomiao-server:latest
ports:
- containerPort: 5000
env:
- name: NODE_ENV
value: development
kind: Service
metadata:
name: server-cluster-ip-service
spec:
type: ClusterIP
selector:
component: server
ports:
- port: 5000
targetPort: 5000
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: server-cluster-ip-service
port:
number: 5000
我的minikube IP是
➜ minikube ip
192.168.64.12
当我在浏览器中打开192.168.64.12时,我得到了502坏网关
看完后我有了一些调试的想法。以下是我尝试过的:
➜ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h34m
server-cluster-ip-service ClusterIP 10.102.5.161 <none> 5000/TCP 4h39m
➜ kubectl get pods
NAME READY STATUS RESTARTS AGE
server-deployment-bc6777445-pj59f 1/1 Running 0 4h39m
➜ kubectl exec -it server-deployment-bc6777445-pj59f -- sh
/app # apk add --no-cache curl
...
/app # curl 10.102.5.161:5000
curl: (28) Failed to connect to 10.102.5.161 port 5000: Operation timed out
➜ kubectl获得服务
名称类型CLUSTER-IP外部IP端口年龄
kubernetes ClusterIP 10.96.0.1 443/TCP 5h34m
服务器群集ip服务群集ip 10.102.5.161 5000/TCP 4h39m
➜ kubectl得到豆荚
名称就绪状态重新启动
服务器-deployment-bc6777445-pj59f 1/1运行0 4h39m
➜ kubectl exec-it server-deployment-bc6777445-pj59f--sh
/应用程序#apk添加--无缓存卷曲
...
/附录10.102.5.161:5000
curl:(28)未能连接到10.102.5.161端口5000:操作超时
我的部署吊舱现在似乎在连接ClusterIP服务时出现问题。任何帮助都会很好 原来问题是由我的VPN引起的 在我的问题中,我没有为Kubernetes配置更改任何内容 此外,让Express.js服务器在
0.0.0.0
上显式侦听也是不必要的
(注意@David Maze在关于0.0.0.0
的问题下的评论仍然有价值)
写这篇文章的时候,我在中国。为了在仍然使用Kubenetes/minikube的情况下摆脱VPN,我找到了一种方法,并将其发布在GitHub上
使用此解决方案关闭VPN后,一切正常
在中国使用minikube复制我的解决方案:
第1步-下载阿里云版本minikube
curl-Lo minikubehttps://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v1.14.2/minikube-darwin-amd64 &&chmod+x迷你工棚和sudo mv迷你工棚/usr/local/bin/
注意:您可以在上面的命令中找到要替换的新版本v1.14.2
第2步-启动minikube
minikube启动——镜像国家cn\
--驱动程序=hyperkit\
--iso url=https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.15.0.iso \
--注册表镜像=https://xxxxxxxx.mirror.aliyuncs.com
注意1:您可以在找到最新的minikube版本,然后将上面命令中的v1.15.0
替换为较新版本
然而,Aliyun的minikube版本有点落后。要验证是否存在新版本,可以将URL中的版本替换为不同的新版本,例如v1.15.1
,然后在浏览器中打开它
注2:对于上述命令中的xxxxxxxx
,您可以在
(需要先注册阿里云账号)
注3:您可以将更多参数传递到此Aliyun版本minikube start
,请访问
在我的例子中,我使用macOS上的
驱动程序
hyperkit和Aliyun的iso url
,注册表镜像
来加快速度。当你说“它在侦听”时,这是你的应用程序代码(可能是侦听()
或绑定()
调用)或它的配置中特有的东西吗?通常,如果容器化进程侦听本地主机类型的地址,则无法从其容器外部访问该地址;您需要将其设置为收听0.0.0.0:5000。如果docker在没有Kubernetes的情况下运行映像,您应该会看到相同的行为。您是否在minikube集群中启用了Ingress插件
?您可以使用Nginx
image或helloworld
image尝试部署吗?也许可以帮你。@DavidMaze我补充了更多细节。这是一个使用监听端口5000的Express.js应用程序。我遇到过,一旦找到解决方案,我会报告。@PjoterS是的,我启用了Ingress插件。然而,现在还没有。因为我的问题是我的部署吊舱在连接ClusterIP服务时出现问题。kubectl描述入口服务的输出是什么?为什么要使用ClusterIP?ClusterIp是一种内部服务