service代理模式、负载均衡与服务发现

service:服务,是一个虚拟概念,逻辑上代理后端pod。众所周知,pod生命周期短,状态不稳定,pod异常后新生成的pod ip会发生变化,之前pod的访问方式均不可达。通过service对pod做代理,service有固定的ip和port,ip:port组合自动关联后端pod,即使pod发生改变,kubernetes内部更新这组关联关系,使得service能够匹配到新的pod。这样,通过service提供的固定ip,用户再也不用关心需要访问哪个pod,以及pod是否发生改变,大大提高了服务质量。如果pod使用rc创建了多个副本,那么service就能代理多个相同的pod,通过kube-proxy,实现负载均衡

[root@k8s-master ~]# vim service.yaml 
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
  - name: http
    protocol: TCP
    port: 80
    targetPort: 80
  - name: https
    protocol: TCP
    port: 443
targetPort: 443
[root@k8s-master ~]# kubectl get all
NAME                TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
svc/kubernetes      ClusterIP   10.10.10.1    <none>        443/TCP   5d
svc/nginx-service   ClusterIP   10.10.10.85   <none>        88/TCP    20h
[root@k8s-master ~]# kubectl create -f service.yaml 
[root@k8s-master ~]# kubectl get svc
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes      ClusterIP   10.10.10.1     <none>        443/TCP          5d
my-service      ClusterIP   10.10.10.212   <none>        80/TCP,443/TCP   24s
nginx-service   ClusterIP   10.10.10.85    <none>        88/TCP           20h

查看pod的标签,用标签来识别,并代理到后端的服务上

[root@k8s-master ~]# kubectl get pod --show-labels -o wide
nginx-pod                           1/1       Running   1          17h       172.17.80.4   192.168.30.23   app=nginx

修改我们创建的my-service,把标签改为nginx,然后我们访问我们的my-service分配的clusterIP就能直接代理到后端的Nginx上了
[root@k8s-master ~]# kubectl edit svc/my-service

访问10.10.10.212:80

[root@k8s-node1 ~]# curl 10.10.10.212:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
[root@k8s-node2 ~]# curl 10.10.10.212:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

service服务发现

[root@k8s-master ~]# vim busybox-5d4f595646-dzjv4.yaml
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always
[root@k8s-master ~]# kubectl create -f busybox-5d4f595646-dzjv4.yaml 
[root@k8s-master ~]# kubectl get pod
NAME                                READY     STATUS    RESTARTS   AGE
busybox                             1/1       Running   0          1m

进入创建的pod可以看到负载到的cluster IP 和端口

[root@k8s-master ~]# kubectl exec -it busybox sh
/ # env
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.10.10.1:443
MY_SERVICE_PORT_80_TCP=tcp://10.10.10.212:80
MY_SERVICE_PORT_443_TCP_ADDR=10.10.10.212
NGINX_SERVICE_PORT_88_TCP_ADDR=10.10.10.85
HOSTNAME=busybox
/ # echo ${MY_SERVICE_SERVICE_HOST}
10.10.10.212
/ # echo ${MY_SERVICE_SERVICE_PORT}
80
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值