Docker Kubernetes-minikube服务连接超时

Docker Kubernetes-minikube服务连接超时,docker,kubernetes,dockerfile,Docker,Kubernetes,Dockerfile,我有一个Docker环境,有3个容器:nginx、带Laravel的PHP和一个MySQL数据库。它工作得很好,我现在正在努力学习库伯内特斯 我希望仅为nginx容器创建一个部署和一个服务,以使开始时变得简单: 以下是deployment.yaml: apiVersion: apps/v1 kind: Deployment metadata: name: toolkit-app-deployment spec: replicas: 1 selector:

我有一个Docker环境,有3个容器:nginx、带Laravel的PHP和一个MySQL数据库。它工作得很好,我现在正在努力学习库伯内特斯

我希望仅为nginx容器创建一个部署和一个服务,以使开始时变得简单:

以下是deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
    name: toolkit-app-deployment
spec:
    replicas: 1
    selector:
        matchLabels:
            container: toolkit-server
    template:
        metadata:
            labels:
                container: toolkit-server
        spec:
            containers:
                - name: toolkit-server
                  image: my/toolkit-server:test
                  ports:
                      - containerPort: 8000
            imagePullSecrets:
                - name: my-cred
ports:
  - containerPort: 80
这是服务。yaml:

apiVersion: v1
kind: Service
metadata:
    name: backend
spec:
    selector:
        container: toolkit-server
    ports:
        - protocol: "TCP"
          port: 80
          targetPort: 8000
    type: LoadBalancer
targetPort: 80
如果需要,这里是docker-compose.yaml的nginx部分:

version: "3.8"

services:
    server:
        build:
            context: .
            dockerfile: dockerfiles/nginx.dockerfile
        ports:
            - "8000:80"
        volumes:
            - ./src:/var/www/html
            - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
        container_name: toolkit-server
部署已成功创建,我可以看到1/1吊舱正在运行

然而,当我运行minikube服务后端时,我得到的URL刚好超时

我本来希望看到某种类型的nginx页面,可能是nginx错误——但由于超时,我不确定下一步是什么

我是Kubernetes的新手,很有可能我把端口搞砸了,或者是一些基本的东西。谢谢你的帮助

编辑:

根据@david maze的建议,我在deployment.yaml中更改了以下内容:

apiVersion: apps/v1
kind: Deployment
metadata:
    name: toolkit-app-deployment
spec:
    replicas: 1
    selector:
        matchLabels:
            container: toolkit-server
    template:
        metadata:
            labels:
                container: toolkit-server
        spec:
            containers:
                - name: toolkit-server
                  image: my/toolkit-server:test
                  ports:
                      - containerPort: 8000
            imagePullSecrets:
                - name: my-cred
ports:
  - containerPort: 80
以及以下正在使用的。yaml:

apiVersion: v1
kind: Service
metadata:
    name: backend
spec:
    selector:
        container: toolkit-server
    ports:
        - protocol: "TCP"
          port: 80
          targetPort: 8000
    type: LoadBalancer
targetPort: 80

正如预期的那样,在浏览器中查看时,这给了我一个nginx错误页面,但关键是不再超时。

这是一个社区wiki答案,用于提高可见性。请随意扩展它

如评论中所述,问题是由于端口配置错误造成的

TargetPort是服务将向其发送请求的端口,您的pod将监听该端口。容器中的应用程序也需要侦听此端口

ContainerPort定义可在容器内访问应用程序的端口

因此,在您的用例中,部署应该具有:

ports:
  - containerPort: 80
以及服务:

targetPort: 80

这将使连接不再超时。

您是否对Nginx配置进行了任何更改,使其在端口8000上侦听,或者容器内的进程在默认HTTP端口80上侦听?我可能会将pod和服务规范中提到的端口8000更改为端口80。您好,我最初的Docker环境是通过localhost:8000访问的-我已经将部署和服务YAML都更改为端口80,现在我收到一个502坏网关nginx错误-这是一个进步!谢谢你的帮助你好,李。你能用上面提到的信息编辑你的问题吗?这将使分析更容易。没问题-我已经编辑了问题谢谢@Lee。那么,现在的实际问题是什么?当前行为(在David提出的更改之后)是您想要实现的吗?