1. 前言

在这里插入图片描述

前文提要:

  1. kubeadm简单搭建k8s集群
  2. 第三方面板部署k8s

上篇文章我们简单部署了k8s的集群环境,相比一定迫不及待的想部署一个实际应用了吧。那这里我们就简单部署一个大家几乎都用得上的应用nginx。

2. 部署nginx

在这里插入图片描述

2.1. 创建一个nginx的Deployment

里面一一般包含nginx相关的镜像,端口,名字,pod数量

kubernetes主要的功能就是管理多个Pod,Pod中可以包含一个或多个容器,而kubernetes是如可管理多个Pod的呢?对,没错,就是通过控制器,比如Deployment

vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2  # 设置副本数量
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest #镜像拉取地址
        ports:
        - containerPort: 80 #监听端口
kubectl apply -f nginx-deployment.yaml
  1. 执行配置
kubectl apply -f nginx-deployment.yaml

在这里插入图片描述
在这里插入图片描述
到这里running就算创建完成了。

❓那么,如何访问呢?或者说怎么把服务暴漏呢?那么多容器,到底访问哪一个呢?❓

2.2. 创建一个nginx的service

Service的主要目标是为Kubernetes集群内的应用程序提供一个稳定的网络端点,使它们可以相互通信。它顺便实现了以下几个功能。

  • 服务发现:Kubernetes中的应用程序通常以副本的方式运行,这意味着多个相同的应用程序副本可能分布在集群的不同节点上。Service允许客户端应用程序找到并连接到这些副本,而无需了解它们的具体位置。Service为应用程序提供了一个虚拟的DNS名称或IP地址,客户端可以使用该名称或IP地址来访问服务。
  • 负载均衡:Service在后台自动为多个副本分布的应用程序提供负载均衡。当客户端请求连接到Service时,它会将请求平均分发给可用的副本,以确保流量分布均匀,避免某个副本过载。
  • 完整性检查:Service还提供了对服务的基本完整性检查。如果某个副本不可用(例如,由于节点故障或容器崩溃),Service会将流量路由到可用的副本,以确保服务的连续性。

不过我们为了测试,我们就用了一个最简单的ndeport的网络,说实话这并为用到k8s的核心内容,相当于单主机部署nginx并且开了一个端口。

在这里插入图片描述

  • ClusterIP是默认的Service类型。 它为服务分配一个虚拟的Cluster IP地址,仅在Kubernetes集群内部可用。
    这意味着只有集群内部的其他Pod可以通过Cluster IP地址访问该服务。
    ClusterIP通常用于内部微服务之间的通信,不会暴露到集群外部。 NodePort:

  • NodePort: 类型的Service会在每个Node上都开放一个静态端口,允许从集群外部访问服务。
    当外部流量到达NodePort端口时,它将被转发到Service的Cluster IP地址,并由Kubernetes进行负载均衡。
    NodePort通常用于需要从集群外部访问服务的场景,但不是最安全的方式,因为端口是公开的。 LoadBalancer:

  • LoadBalancer:类型的Service使用云提供商(如AWS、Azure、GCP)的负载均衡器服务来公开应用程序。
    在创建LoadBalancer Service时,云提供商将为该服务分配一个外部IP地址,并将流量分发到集群中的Pod。
    LoadBalancer通常用于需要在云环境中公开服务并实现负载均衡的情况。它对于外部流量非常有用,并且可以与HTTPS等TLS证书集成以提供安全的外部访问。

一般在落地方案中LoadBalancer分发流量是比较合适的,同时在纯后端应用中使用ClusterIP也没问题。

  1. 创建配置文件:
vim nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 8000 #nortPort开在主机的端口
  type: NodePort  # 这里使用LoadBalancer类型,如果你在本地运行,可以使用NodePort类型或ClusterIP类型

/1e208a1ada514890ae22c3689db903b5.png)

  1. 执行配置文件:
kubectl apply -f nginx-service.yaml

在这里插入图片描述

3. 总结

这篇文章,我们使用nodePort访问了k8s部署的nginx,并且简单理解了k8s的网络构成,这对对于我们理解k8s的庞大架构是重要的,希望我们不忘初心,砥砺前行!

Logo

一起探索未来云端世界的核心,云原生技术专区带您领略创新、高效和可扩展的云计算解决方案,引领您在数字化时代的成功之路。

更多推荐