Kubernetes(简称K8s)作为当今最流行的容器编排平台,其强大的功能让开发者能够轻松管理容器化的应用程序。然而,将K8s集群中的服务暴露到公网,以便外部访问,是一项需要掌握的技能。本文将深入探讨如何配置公网服务,确保集群内外可以顺畅访问。

一、K8s集群架构概述

在配置公网服务之前,我们需要了解K8s集群的基本架构。K8s集群由Master节点和工作节点(Worker Nodes)组成。Master节点负责集群的调度、资源管理等核心功能,而工作节点则负责运行容器化的应用。

1.1 Master节点

Master节点包含以下重要组件:

  • API Server:处理REST操作,提供集群的统一入口。
  • etcd:分布式键值存储,用于存储集群的所有数据。
  • Controller Manager:负责执行集群的控制逻辑,管理不同的控制器。
  • Scheduler:调度器,负责将容器调度到合适的节点上运行。

1.2 Worker Nodes

工作节点包含以下重要组件:

  • container runtime:如Docker或containerd,用于实际运行容器。
  • kubelet:运行在每个节点上,负责管理容器的生命周期。
  • kube-proxy:负责网络代理和负载均衡。

二、配置公网服务

将K8s集群中的服务暴露到公网,主要有以下三种方式:

2.1 NodePort

NodePort是K8s中一种基本的通信方式。通过为Service设置NodePort,可以将服务暴露到集群中每个节点的指定端口上。

示例代码

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      nodePort: 30000

2.2 LoadBalancer

LoadBalancer是服务暴露到公网的标准形式。在云环境中,只需要在创建Service时指定type为LoadBalancer,云服务商将自动为我们创建一个负载均衡器。

示例代码

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

2.3 Ingress

Ingress用于管理进入集群的HTTP(S)流量,允许基于路径和主机名的路由规则。

示例代码

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: myapp.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

三、总结

通过以上方法,我们可以轻松地将K8s集群中的服务暴露到公网,实现集群内外访问。掌握这些技能,将有助于我们更好地利用K8s的强大功能,提升应用程序的可用性和可访问性。