欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

k8s学习整理-service

程序员文章站 2024-03-11 16:53:13
...

近期通过网课学习了李振良老师kubernetes教程。根据老师的课堂内容笔记做了相关的整理,以便于加深理解和后期自查

Pod与services关系

动态感知pod的IP,并对外提供访问入口

  • 底层实现主要有iptables与ipvs两种网络模式
apiVersion: v1
kind: Service
metadata:
    name: service_name
    namespace: default
spec:
    clusterIP: 10.0.0.1  # 指定一个IP
    ports:
    - name: http
      protocol: tcp
      port: 80          # service暴露端口
      targetPort: 80    # containers端口
    selector:           # 选择标签
        all: nginx

Service 意义

  • 防止pod失联(服务发现)
  • 定义一组Pod访问策略(负载均衡)
  • 支持ClusterIP,NodePort,LoadBalancer三种类型

Service 类型

  • clusterIP
    • 默认。分配一个集群内部的VIP
  • NodePort
    • 已知node与port的前提下,可以搭建lvs做负载均衡
    • 用户 -> 域名 -> 负载均衡 -> NodeIp:Port -> PodIp:Port
  • LoadBalancer
    • 工作在特地的cloud,如AWS,Google Cloud

-ipvsadm
+ ipvsadmin -ln
- 查看service转换策略

service 代理模式

kube-proxy
实现流量转发规则

iptables与ipvs

  • 支持ipvs

    • kube-proxy.yaml
      • mode: ipvs
    • 基于内核ipvs模块支持负载均衡
    • 优缺点
      • 工作在内核状态,更好的性能
      • 调度算法丰富: rr, wrr, lc, wlc ,ip hash
  • 支持iptables

    • kube-proxy.yaml
      • mode : iptales
    • iptables会创建很多规则
      • 非增量更新
    • iptables逐级匹配,延时
    • 优缺点
      • 灵活,功能强大
      • 规则遍历更新和匹配,呈线性延迟

coredns

  • DNS服务器会监视kube-apiserver,为每一个service创建DNS记录用于域名解析
  • 格式: .<service.namespace>.svc.cluster.local
    • namespace如果不指定,则解析当前namespace的service
相关标签: kubernetes