Docker 部署吊舱无法连接群集IP服务

Docker 部署吊舱无法连接群集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

我尝试使用入口暴露我的服务器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:
      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是一种内部服务