k8s service简单实现

前言

一般一个应用程序需要通过某种机制来对外提供服务,对容器来说最简单的就是通过TCP/IP机制及监听IP和端口号来实现。

step1
以tomcat为例,创建一个提供Web服务的RC,两个副本,containerPort设置端口号8080,命名空间test:
apiVersion: v1
kind: ReplicationController
metadata:
  name: webapp
  namespace: test
spec:
  replicas: 2
  template:
    metadata:
      name: webapp
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: tomcat
        ports:
        - containerPort: 8080
step2
创建该RC:
kubectl create -f webapp-rc.yaml

在这里插入图片描述

kubectl get pods -l app=webapp -o yaml -n test|grep podIP
kubectl get rc -o wide -n test
kubectl get pods -o wide -n test

在这里插入图片描述在这里插入图片描述在这里插入图片描述访问tomcat服务:
在这里插入图片描述 但这样子有一个很明显的弊端,当因某种原因导致pod被删除或重启,pod也许会被调度到另外一个node上,这会导致pod的ip地址发生变化。而且,如果容器应用本身就是分布式的部署方式,由多个实例共同提供服务,这时就需要在实例的前端设置一个负载均衡器。Service就是用于这里的核心组件。

step3

通过expose来创建service:

kubectl expose rc webapp -n test

在这里插入图片描述查看新创建的service,可以看到一个虚拟IP地址(ClusterIP):

kubectl get svc -n test

在这里插入图片描述通过虚拟IP访问:
在这里插入图片描述这里通过ClusterIP访问的会被自动负载到两个pod之一。

step4

通过配置文件定义service来创建service。

apiVersion: v1
kind: Service
metadata:
  name: webapp-1
  namespace: test
spec:
  ports:
  - ports: 8081
    targetPort: 8080
  selector:
    app: webapp

ports指定的为8081,与8080不一样,需要targetPort来指定后端的端口。
创建service并查看:
在这里插入图片描述访问:
在这里插入图片描述同样是会自动负载到后端pod上。

负载策略
  • RoundRobin:轮询模式,轮询转发。
  • SessionAffinity:基于客户端IP地址进行会话保持的模式,即第一次请求被转发在哪里,后续的请求就都会在那里。
    kubernetes默认采用RoundRobin模式进行负载,也可以设置service.spec.sessionAffinity=ClientIP来启用SessionAffinity策略。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值