k8s从入门到放弃之Service负载均衡

k8s从入门到放弃之Service负载均衡

在 Kubernetes (K8s) 中,Service 是一种抽象,它定义了一组逻辑上的 Pod 和访问它们的策略。Service 的主要目的是提供一种可靠的方式来访问一组具有相同标签(Label)的 Pod,即使这些 Pod 可能会在集群中被动态地创建或销毁。

Service的核心功能

  • 服务发现:通过 DNS 或者环境变量的方式,让其他应用可以找到并访问到这个 Service。
  • 负载均衡:将到达 Service 的请求分发给后端的多个 Pod 实例。
  • 稳定的 IP 地址和 DNS 名称:为一组 Pod 提供一个固定的 IP 地址和 DNS 名称,即使后端的 Pod 发生了变化,如重启、扩展等操作。
  • 流量代理:通过 kube-proxy 组件实现对流量的转发,支持多种代理模式,包括 userspace、iptables 和 IPVS。

Service的类型

  • ClusterIP:默认类型,通过集群内部 IP 暴露服务,只能从集群内部访问。
  • NodePort:通过每个节点的 IP 和静态端口暴露服务,允许外部流量通过节点 IP 和 NodePort 访问服务。
  • LoadBalancer:通常用于云环境中,自动创建一个外部负载均衡器,并分配一个外部 IP 来暴露服务。

ClusterIP案例

资源文档kubectl explain Service.spec

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          readinessProbe:
            tcpSocket:
              port: 80
          resources:
            limits:
              cpu: "100m"
          ports:
            - containerPort: 80
---

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: ClusterIP
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

NodePort案例

资源文档kubectl explain Service.spec

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          readinessProbe:
            tcpSocket:
              port: 80
          resources:
            limits:
              cpu: "100m"
          ports:
            - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

查看集群外部访问地址

复制代码
[root@master /]# kubectl get svc 
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        20d
nginx-svc    NodePort    10.107.140.239   <none>        80:32017/TCP   2m16s

LoadBalancer案例

资源文档 kubectl explain Service.spec

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-nginx
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.0
          readinessProbe:
            tcpSocket:
              port: 80
          resources:
            limits:
              cpu: "100m"
          ports:
            - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: LoadBalancer
  selector:
    app: web
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

查看集群外部访问地址

复制代码
[root@master /]# kubectl get svc
NAME         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE
kubernetes   ClusterIP      10.96.0.1       <none>         443/TCP        20d
nginx-svc    LoadBalancer   10.101.116.99   10.244.2.240   80:30143/TCP   2m40s

Service 是 Kubernetes 中非常重要的概念之一,它使得应用程序可以在分布式系统中进行有效的通信和协作。通过合理配置 Service,可以确保应用即使在高动态性的容器化环境中也能保持良好的可用性和可访问性。

相关推荐
张忠琳5 小时前
【k3s】AutoK3s v0.9.3 Part 1 入口与 CLI 命令模块 — 超深度逐行分析之三
云原生·容器·kubernetes·k3s·autok3s
xiaoxiangsiyan12 小时前
企业日常运维高频应用服务全解
运维·网络·云原生·容器·dns
AR_xsy12 小时前
docker--资源配额 配置
运维·docker·容器
国际云,接待12 小时前
Docker 容器突然退出、服务莫名重启:从 OOMKilled 到内存泄漏的生产排查手册
运维·docker·容器
暖核13 小时前
Nginx 从入门到实践:部署、配置、反向代理与负载均衡全解
运维·nginx·负载均衡
橙-极纪元13 小时前
把docker的镜像文件从一台服务器中,迁移至另一台服务器
服务器·docker·容器
RobinDevNotes15 小时前
K8s+Ray+vLLM打穿大模型全生命周期(有实践步骤)
人工智能·云原生·容器·kubernetes·生活·vllm
雨声不在15 小时前
docker-android 重启后镜像起不来
android·docker·容器
AR_xsy16 小时前
k8s随笔-cordon排水
云原生·容器·kubernetes
黑泽明*16 小时前
LVS-负载均衡全解析
运维·负载均衡·lvs