Kubernetes练习<5>---service工作模式

一、service工作模式-ClusterIP

可以实现跨主机服务发现及负载均衡

1、集群内部之间可以互相访问

[wjjk8s@server1 manifest]$ kubectl get pod
NAME                               READY   STATUS    RESTARTS   AGE
nginx-deployment-d46f5678b-kk699   1/1     Running   0          26s
nginx-deployment-d46f5678b-t64jn   1/1     Running   0          26s
[wjjk8s@server1 manifest]$ kubectl run test -it --image=busyboxplus --image-pull-policy='IfNotPresent'
If you don't see a command prompt, try pressing enter.
/ # curl 10.244.1.51		#可以直接访问,整个集群的主机都可以相互访问

在这里插入图片描述

2、使用service–ClusterIP来使内部主机访问pod

[wjjk8s@server1 manifest]$ kubectl explain service.spec		#查看使用帮助

选择器:标签

创建service.yaml
  selector:
    app: nginx

在这里插入图片描述

[wjjk8s@server1 manifest]$ kubectl apply -f service.yaml 
[wjjk8s@server1 manifest]$ kubectl describe svc myservice 	#类型为ClusterIP,只限于集群内部访问
Type:              ClusterIP
[wjjk8s@server1 manifest]$ kubectl get svc
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   10d
myservice    ClusterIP   10.110.241.240   <none>        80/TCP    9s
[wjjk8s@server1 manifest]$ kubectl attach test -it		#进入容器,成功访问
/ # curl 10.102.1.156

在这里插入图片描述

外部主机:

[root@server2 ~]# iptables -t nat -nL | grep 10.102.1.156
KUBE-MARK-MASQ  tcp  -- !10.244.0.0/16        10.102.1.156         /* default/myservice: cluster IP */ tcp dpt:80
KUBE-SVC-DN4K6DJYBW27OJYO  tcp  --  0.0.0.0/0            10.102.1.156         /* default/myservice: cluster IP */ tcp dpt:80

在这里插入图片描述

3、通过lvs实现pod负载均衡
(1)安装ipvsadm
在集群node节点server1/2/4:

[root@server1 ~]# yum install -y ipvsadm
[root@server2 ~]# yum install -y ipvsadm
[root@server4 ~]# yum install -y ipvsadm

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)刷新,使用lvs模式:在master节点,设置集群的 lvs模式
server1:

[wjjk8s@server1 ~]$ kubectl -n kube-system edit cm kube-proxy 	#将模式改为ipvs即可
configmap/kube-proxy edited
[wjjk8s@server1 ~]$ kubectl -n kube-system get pod | grep kube-proxy | awk '{system ("kubectl delete pod "$1" -n kube-system")}'
[wjjk8s@server1 ~]$ kubectl -n kube-system get pod | grep kube-proxy	#再次查看成功变更

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)lvs策略自动出现

[root@server2 ~]# ipvsadm -l

在这里插入图片描述

(4)删除server.yaml后iptables策略不存在,lvs创建后iptables策略也不重新生成了,但是lvs策略更新

[root@server2 ~]# ipvsadm -ln

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(5)将副本改为4个

[wjjk8s@server1 manifest]$ kubectl describe svc myservice	#查看会自动做服务发现
但是发现lvs负载均衡策略没有更改,除非删除后重新启动apply -f service.yaml
[wjjk8s@server1 manifest]$ kubectl delete -f service.yaml 
service "myservice" deleted
[wjjk8s@server1 manifest]$ kubectl apply -f service.yaml 
service/myservice created

在这里插入图片描述

[root@server2 ~]# ipvsadm -ln
TCP  10.106.77.77:80 rr
  -> 10.244.1.57:80               Masq    1      0          0         
  -> 10.244.1.58:80               Masq    1      0          0         
  -> 10.244.2.67:80               Masq    1      0          0         
  -> 10.244.2.68:80               Masq    1      0          0   

在这里插入图片描述

二、service工作模式-NodePort类型

1、更改类型

[wjjk8s@server1 manifest]$ kubectl edit svc myservice 		#运行时更改

在这里插入图片描述

在这里插入图片描述
外部网页可直接访问
在这里插入图片描述
在这里插入图片描述

[wjjk8s@server1 manifest]$ vim service.yaml 		#删除后直接文件更改

2、kubernetes提供了一个DNS插件给service,可以通过解析的方式访问

[wjjk8s@server1 manifest]$ kubectl get svc		#改回ClusterIP
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   11d
myservice    ClusterIP   10.111.100.242   <none>        80/TCP    6s
[wjjk8s@server1 manifest]$ kubectl attach test -it
/ # nslookup myservice
/ # nslookup myservice.default.svc.cluster.local
/ # curl myservice.default.svc.cluster.local

在这里插入图片描述
在这里插入图片描述
三、service工作模式-LoadBalancer模式

[wjjk8s@server1 manifest]$ vim service.yaml 
[wjjk8s@server1 manifest]$ kubectl apply -f service.yaml 
[wjjk8s@server1 manifest]$ kubectl get svc

在这里插入图片描述

外部网络页面成功访问

在这里插入图片描述

四、service工作模式-ExternalName模式

1、随机分配ip

[wjjk8s@server1 manifest]$ vim exter.yaml		
spec:
  type: ExternalName
  externalName: reg.westos.org
[wjjk8s@server1 manifest]$ kubectl apply -f exter.yaml
[wjjk8s@server1 manifest]$ kubectl get svc
myservice    ExternalName   <none>       reg.westos.org   <none>    11s
#service和pod无关,没有分配ip,只是通过cname方式添加了一条记录
外部更改地址后集群内部不需要任何更改,还是ping myservice.default.svc.cluster.local

在这里插入图片描述

2、service允许为其分配一个公有IP

[wjjk8s@server1 manifest]$ vim exter.yaml 
[wjjk8s@server1 manifest]$ kubectl apply -f exter.yaml
[wjjk8s@server1 manifest]$ kubectl get svc

访问指定ip可以访问到集群的pod中
[root@server2 ~]#  curl 172.25.1.100

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值