Kubernetes-service实例

在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。

为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供—个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。
在这里插入图片描述

Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个Node节点上都运行着一个kube-proxy服务进程。当创建Service的时候会通过api-server向etcd写入创建的service的信息,而kube-proxy会基于监听的机制发现这种Service的变动,然后它会将最新的Service信息转换成对应的访问规则。

在这里插入图片描述

安装ipvsadm
#10.97.97.97:80是service提供的访问入口
#当访问这个入口的时候,可以发现后面有三个pod的服务在等待调用,# kube-proxy会基于rr(轮询〉的策略,将请求分发到其中一个pod上去
#这个规则会同时在集群内的所有节点上都生成,所以在任何一个节点上访问都可以。
[ root@node1 ~]# ipvsadm -Ln

安装deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80 

进入nginx修改主页面的信息

kubectl exec -it deployment-5ffc5bf56c-z2vwk -n dev /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
# echo "1" > /usr/share/nginx/html/index.html
# exit
[root@master ~]# curl 10.244.1.4
1

安装service

apiVersion: v1
kind: Service
metadata:
  name: service
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: 10.97.97.97
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

出现的错误:标签要一样 app:nginx-pod

查看

[root@master ~]# kubectl describe svc  -n dev
Name:              service
Namespace:         dev
Labels:            <none>
Annotations:       <none>
Selector:          app=nginx-pod
Type:              ClusterIP
IP:                10.97.97.97
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Endpoints:         10.244.1.2:80,10.244.2.2:80,10.244.2.3:80
Session Affinity:  None
Events:            <none>

[root@master ~]# kubectl get deploy -n dev
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
deployment   3/3     3            3           17m

[root@master ~]# kubectl get pod -n dev
NAME                          READY   STATUS    RESTARTS   AGE
deployment-5ffc5bf56c-4p8wk   1/1     Running   0          17m
deployment-5ffc5bf56c-d9tqr   1/1     Running   0          17m
deployment-5ffc5bf56c-ljzzm   1/1     Running   0          17m

[root@master ~]# curl 10.97.97.97
2
[root@master ~]# curl 10.97.97.97
3
[root@master ~]# curl 10.97.97.97
1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值