【发布时间】:2021-04-07 11:55:40
【问题描述】:
我有一个包含 3 个容器的 Docker 环境:nginx、带有 Laravel 的 PHP 和一个 MySQL 数据库。效果很好,我现在正在尝试学习 Kubernetes。
我希望为 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
这里是 service.yaml:
apiVersion: v1
kind: Service
metadata:
name: backend
spec:
selector:
container: toolkit-server
ports:
- protocol: "TCP"
port: 80
targetPort: 8000
type: LoadBalancer
如果需要,这里是 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 的 Pod 正在运行。
但是,当我运行 minikube service backend 时,我得到的 URL 只是超时。
我期待看到某种 nginx 页面,可能是 nginx 错误 - 但由于超时,我不确定下一步是什么。
我是 Kubernetes 的新手,很有可能我把端口弄乱了或者一些基本的东西。任何帮助表示赞赏。
编辑:
根据@david-maze 的建议,我在 deployment.yaml 中更改了以下内容:
ports:
- containerPort: 80
以及 service.yaml 中的以下内容:
targetPort: 80
当我在浏览器中查看时,这给了我一个 nginx 错误页面,正如预期的那样,但关键是不再超时。
【问题讨论】:
-
您是否对 Nginx 配置进行了任何更改,使其监听端口 8000,或者容器内的进程是否监听默认的 HTTP 端口 80?我可能会将 pod 和服务规范中提到的端口 8000 的两个提及更改为端口 80。
-
嗨,我原来的 Docker 环境是通过 localhost:8000 访问的——我已将部署和服务 yamls 都更改为端口 80,现在我收到 502 bad gateway nginx 错误——这是进步!感谢您的帮助
-
嗨@Lee。你能用上面提到的信息编辑你的问题吗?这将使分析更容易。
-
没问题 - 我已经编辑了问题
-
谢谢@Lee。那么现在的实际问题是什么?当前的行为(在大卫提出的更改之后)是您想要实现的行为吗?
标签: docker kubernetes dockerfile