【云原生--K8S】Headless服务研究


前言

前面文章《K8S部署一个C/S架构的服务器应用(重点讲Service)》中研究过K8s 的三种服务:ClusterIP、NodePort、LoadBalancer。其中ClusterIP仅支持内部访问,NodePort和LoadBalancer既支持内部访问也支持外部访问。其实K8S还提供了一种很重要的服务Headless,即无头服务,一般应用于分布式应用程序、mysql、redis等。


一、Headless介绍

在分布式应用场景下,由于应用程序已经有了自己的负载均衡策略,所以就不再需要使用 Service 提供的负载均衡功能。在mysql或者redis应用场景下,它们需要直接访问后端pod。针对这些情况,K8S提供了 Headless Service,这类 Service 不会分配 ClusterIP。
Headless服务就是一组Pod组成的只供集群内访问的Service,一般结合StatefulSet用于部署有状态应用的场景,因为是有状态的,所以想找到对应的Pod,可以直接通过pod名称.svc名称.命名空间.svc.cluster.local组成的域名访问。该 Service 的请求流量不需要 kube-proxy 处理,也不会有负载均衡和路由规则,而是由ClusterDNS的域名解析机制直接去访问固定的Pod资源。

二、Headless部署

1.服务部署

server.cpp代码见前篇文章《K8S部署一个C/S架构的服务器应用(重点讲Service)》。
server-dockerfile文件如下:

# 使用Ubuntu作为基础镜像
FROM ubuntu:20.04
 
# 安装编译依赖
RUN apt-get update && apt-get install -y g++ 

RUN mkdir /home/myapp
ADD server.cpp /home/myapp
WORKDIR /home/myapp
RUN g++ server.cpp -o server
CMD ["./server"]

docker build -f ./server-dockerfile -t server:v5 .生成server:v5镜像。
server.yaml文件如下:

apiVersion: apps/v1                 
kind: StatefulSet                   
metadata:                          
  name: server-sts             
spec:                               
  selector:                        
    matchLabels:
      app: server-pod
  serviceName: "server-headless-svc"
  replicas: 2                      
  template:                        
    metadata:                       #pod的元数据
      labels:                       #labels标签,必填一个
        app: server-pod             
    spec:                           #pod的期望状态
      containers:                   #容器
      - name: server                #容器名称
        image: server:v5            #镜像
        ports:                      #容器的端口
        - containerPort: 5188
---
apiVersion: v1               		#版本
kind: Service                		#创建资源的类型
metadata:                    		#资源的元数据
  name: server-headless-svc         #资源的名称,是元数据必填项
  labels:                    		#labels标签  
    app: server-headless-svc
spec:                        		#期望状态
  clusterIP: None     				#无头服务
  ports:                     		#端口
    - port: 30060
      targetPo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值