基于K8s实现nginx静态页域名访问

基于K8s实现nginx静态页域名访问

简介

本文档详细记录了如何在Docker Desktop的单节点Kubernetes集群上部署一个简单的Nginx静态页面,并通过域名访问的完整实现过程。

环境准备

前提条件

  • 已安装Docker Desktop
  • 已在Docker Desktop中启用Kubernetes功能
  • 已配置好kubectl命令行工具

环境检查

  1. 检查Docker状态
docker info
  1. 检查Kubernetes集群状态
kubectl cluster-info

实现步骤

步骤1:创建静态HTML页面

创建一个简单的静态HTML页面,作为Nginx的默认首页。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Welcome to Nginx on Kubernetes</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f0f0f0;
            margin: 0;
            padding: 0;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
        }
        .container {
            background-color: white;
            padding: 40px;
            border-radius: 8px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
            text-align: center;
        }
        h1 {
            color: #333;
        }
        p {
            color: #666;
        }
        .info {
            margin-top: 20px;
            padding: 10px;
            background-color: #f9f9f9;
            border-radius: 4px;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Welcome to Nginx on Kubernetes!</h1>
        <p>This is a simple static page served by Nginx running on a single-node Kubernetes cluster.</p>
        <div class="info">
            <p><strong>Environment:</strong> Docker Desktop Kubernetes</p>
            <p><strong>Date:</strong> 2026-02-19</p>
        </div>
    </div>
</body>
</html>

将上述内容保存为 index.html 文件。

步骤2:编写Dockerfile构建Nginx镜像

创建一个Dockerfile,使用官方Nginx镜像作为基础,并将我们的静态页面复制到Nginx的默认静态文件目录。

FROM nginx:alpine

COPY index.html /usr/share/nginx/html/

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

将上述内容保存为 Dockerfile 文件。

步骤3:构建Docker镜像

使用Docker命令构建包含静态页面的Nginx镜像。

docker build -t nginx-static .

验证镜像是否构建成功:

docker images | grep nginx-static

步骤4:创建Kubernetes部署配置

创建一个Kubernetes Deployment配置文件,定义如何部署我们的Nginx应用。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-static-deployment
  labels:
    app: nginx-static
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-static
  template:
    metadata:
      labels:
        app: nginx-static
    spec:
      containers:
      - name: nginx-static
        image: nginx-static:latest
        ports:
        - containerPort: 80
        imagePullPolicy: Never  # 使用本地构建的镜像,不尝试从远程拉取

将上述内容保存为 nginx-deployment.yaml 文件。

步骤5:创建Kubernetes服务配置

创建一个Kubernetes Service配置文件,使用NodePort类型来暴露服务。

apiVersion: v1
kind: Service
metadata:
  name: nginx-static-service
  labels:
    app: nginx-static
spec:
  selector:
    app: nginx-static
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
    name: http
  type: NodePort

将上述内容保存为 nginx-service.yaml 文件。

步骤6:应用Kubernetes配置并验证

  1. 应用Deployment配置:
kubectl apply -f nginx-deployment.yaml
  1. 应用Service配置:
kubectl apply -f nginx-service.yaml
  1. 验证Deployment状态:
kubectl get deployments nginx-static-deployment
  1. 验证Pod状态:
kubectl get pods -l app=nginx-static
  1. 验证Service状态,获取NodePort端口:
kubectl get service nginx-static-service

步骤7:配置域名访问

  1. 编辑本地hosts文件,添加域名映射:
sudo bash -c 'echo "127.0.0.1 nginx-static.local" >> /etc/hosts'
  1. 验证服务是否可以通过IP和端口访问:
curl http://localhost:32513  # 注意:32513是示例端口,实际端口以kubectl get service命令的输出为准
  1. 验证服务是否可以通过域名访问:
curl http://nginx-static.local:32513  # 注意:32513是示例端口,实际端口以kubectl get service命令的输出为准

总结

通过以上步骤,我们成功实现了:

  1. 在Docker Desktop的单节点Kubernetes集群上部署了一个Nginx静态页面
  2. 通过NodePort类型的Service暴露了服务
  3. 配置了域名访问(通过修改hosts文件)

后续步骤

如果需要进一步优化,可以考虑:

  1. 使用Ingress控制器替代NodePort,实现更灵活的路由和域名管理
  2. 添加配置管理,实现静态页面内容的动态更新
  3. 配置资源限制和健康检查,提高应用的稳定性
  4. 实现CI/CD流程,自动化部署过程

故障排查

如果遇到问题,可以尝试以下方法:

  1. 检查Pod状态和日志:
   kubectl describe pod <pod-name>
   kubectl logs <pod-name>
  1. 检查Service状态:
   kubectl describe service nginx-static-service
  1. 检查Docker镜像是否存在:
   docker images | grep nginx-static
  1. 验证本地hosts文件配置:
   cat /etc/hosts | grep nginx-static

igozhang 2021