使用命名空间隔离工作负载

KubernetesKubernetesIntermediate
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

Kubernetes 提供了命名空间(namespace)作为隔离集群中工作负载和资源的一种方式。在本实验中,你将学习如何使用命名空间来隔离工作负载和资源。你将创建一个命名空间,在该命名空间中部署一个简单的 Web 应用程序,并验证该 Web 应用程序是否与集群中的其他资源隔离。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicsGroup(["`Basics`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/BasicCommandsGroup(["`Basic Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/AdvancedCommandsGroup(["`Advanced Commands`"]) kubernetes(("`Kubernetes`")) -.-> kubernetes/TroubleshootingandDebuggingCommandsGroup(["`Troubleshooting and Debugging Commands`"]) kubernetes/BasicsGroup -.-> kubernetes/initialization("`Initialization`") kubernetes/BasicCommandsGroup -.-> kubernetes/get("`Get`") kubernetes/BasicCommandsGroup -.-> kubernetes/create("`Create`") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("`Expose`") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("`Apply`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/describe("`Describe`") kubernetes/TroubleshootingandDebuggingCommandsGroup -.-> kubernetes/exec("`Exec`") subgraph Lab Skills kubernetes/initialization -.-> lab-9199{{"`使用命名空间隔离工作负载`"}} kubernetes/get -.-> lab-9199{{"`使用命名空间隔离工作负载`"}} kubernetes/create -.-> lab-9199{{"`使用命名空间隔离工作负载`"}} kubernetes/expose -.-> lab-9199{{"`使用命名空间隔离工作负载`"}} kubernetes/apply -.-> lab-9199{{"`使用命名空间隔离工作负载`"}} kubernetes/describe -.-> lab-9199{{"`使用命名空间隔离工作负载`"}} kubernetes/exec -.-> lab-9199{{"`使用命名空间隔离工作负载`"}} end

启动 Minikube 集群

在创建资源之前,你需要一个正在运行的 Kubernetes 集群。Minikube 是一个轻量级的 Kubernetes 环境,可以在你的本地机器上运行。

  1. 导航到工作目录

    打开终端并导航到默认的项目文件夹:

    cd /home/labex/project
  2. 启动 Minikube

    启动 Minikube 以初始化一个 Kubernetes 集群:

    minikube start
    • 此命令将在你的本地机器上设置一个单节点的 Kubernetes 集群。
    • 根据系统性能,Minikube 可能需要几分钟才能启动。
  3. 验证 Minikube 是否正在运行

    检查 Minikube 集群的状态:

    minikube status
    • 查找 kubeletapiserver 等组件是否显示为 Running
    • 如果集群未运行,请重新运行 minikube start

如果启动 Minikube 时遇到问题,可以使用 minikube delete 来重置环境(如有需要)。

创建命名空间

在这一步骤中,你将创建一个名为 webapp 的命名空间,以将 Web 应用程序与集群中的其他资源隔离。

创建一个名为 namespace.yaml 的文件,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: webapp

使用以下命令将命名空间应用到你的集群中:

kubectl apply -f namespace.yaml

使用以下命令验证命名空间是否已成功创建:

kubectl get namespaces

你应该能在命名空间列表中看到 webapp 命名空间。

部署 Web 应用程序

在这一步骤中,你将在 webapp 命名空间中部署一个简单的 Web 应用程序。

创建一个名为 web-app.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app
  namespace: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web-app
  template:
    metadata:
      labels:
        app: web-app
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

该文件创建了一个 Deployment,其中包含一个运行最新版本 Nginx Web 服务器的容器副本。

使用以下命令将 Deployment 应用到你的集群中:

kubectl apply -f web-app.yaml

使用以下命令验证 Web 应用程序是否在 webapp 命名空间中运行:

kubectl get pods -n webapp

你应该能在 webapp 命名空间的 Pod 列表中看到 web-app Pod。

暴露 Web 应用程序

在这一步骤中,你将使用 Kubernetes Service 将 Web 应用程序暴露给外部。

创建一个名为 web-app-service.yaml 的文件,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: web-app
  namespace: webapp
spec:
  selector:
    app: web-app
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP

该文件创建了一个 Service,使用 ClusterIP 将 Web 应用程序暴露给集群。

使用以下命令将 Service 应用到你的集群中:

kubectl apply -f web-app-service.yaml

使用以下命令验证 Service 是否在 webapp 命名空间中运行:

kubectl get services -n webapp

你应该能在 webapp 命名空间的 Service 列表中看到 web-app Service。

验证命名空间隔离

在这一步骤中,你将验证 Web 应用程序是否与集群中的其他资源隔离。

创建一个名为 other-app.yaml 的文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: other
spec:
  replicas: 1
  selector:
    matchLabels:
      app: other
  template:
    metadata:
      labels:
        app: other
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80

在该文件中,你将在默认命名空间中创建另一个名为 other 的 Deployment,该 Deployment 运行一个使用 nginx 镜像的容器。

使用以下命令将 Deployment 应用到你的集群中:

kubectl apply -f other-app.yaml

使用以下命令验证 Deployment 是否在默认命名空间中运行:

kubectl get pods | grep other

你应该能在默认命名空间的 Pod 列表中看到 other Pod。

验证跨命名空间访问

首先,通过运行以下命令找到运行你的应用程序的 Pod 名称:

kubectl get pods -l app=other

你应该能看到 other Pod。记下该 Pod 的名称。

接下来,运行以下命令以在运行你的应用程序的容器中打开一个 shell 会话:

kubectl exec -it pod-name -- /bin/sh

<pod-name> 替换为你之前记下的 Pod 名称。

进入 shell 会话后,运行以下命令以访问 web-app Deployment:

curl web-app.webapp

你应该能看到来自 Nginx Web 服务器的 HTML 响应。

总结

在本实验中,你学习了如何使用命名空间来隔离 Kubernetes 集群中的工作负载和资源。你创建了一个命名空间,在该命名空间中部署了一个简单的 Web 应用程序,使用 Kubernetes Service 将 Web 应用程序暴露给外部,并验证了该 Web 应用程序是否与集群中的其他资源隔离。

您可能感兴趣的其他 Kubernetes 教程