第11节 service
❤️💕💕新时代拥抱云原生,云原生具有环境统一、按需付费、即开即用、稳定性强特点。Myblog:http://nsddd.top
[TOC]
service
我们发现一个问题,就是使用
pod -owide
查看的ip
是每一个pod
结点都不一样的,那么是不是会出现一个问题:就是当我们有一个pod
结点宕机了,这个岂不是凉凉了(还需要修改前端的地址嘛?)太麻烦了,我们可以直接使用service
对外暴露一个公开为网络服务的抽象方法。
🔥Service:Pod的服务发现和负载均衡
- Service 通过 label 关联对应的 Pod
- Servcie 生命周期不跟 Pod 绑定,不会因为 Pod 重创改变 IP
- 提供了负载均衡功能,自动转发流量到不同 Pod
- 可对集群外部提供访问端口
- 集群内部可通过服务名字访问
将pod统一暴露成一组服务
修改nginx配置文件
进入nginx并且修改配置文件访问
查看当前pod详细信息:
kubectl get pod -owide
进入容器内部命令:
kubectl exec -it my-dep-6d4ddbf4f7-bllhd -- /bin/bash
修改配置文件(index.html):
[root@k8s-master01 ~]# kubectl exec -it my-dep-6d4ddbf4f7-bllhd -- /bin/bash
root@my-dep-6d4ddbf4f7-bllhd:/# cd /usr/share/nginx/html/
root@my-dep-6d4ddbf4f7-bllhd:/usr/share/nginx/html# echo "my name is xiongxinwei email:xxw@nsddd.top" > index.html
root@my-dep-6d4ddbf4f7-bllhd:/usr/share/nginx/html# exit
exit
[root@k8s-master01 ~]# curl 100.66.195.43
my name is xiongxinwei email:xxw@nsddd.top
此时已经修改成功~
同样的方式修改:
- my-dep-6d4ddbf4f7-dckmw
- my-dep-6d4ddbf4f7-vvxt8
使用service配置公共地址
查看信息:
暴露成为一个固定的ip:
[root@k8s-master01 ~]# kubectl expose deploy my-dep --port=8000 --target-port=80
service/my-dep exposed
查看service的IP:
kubectl get service
我们访问 `10.96.2.163:8000`
curl 10.96.2.163:8000
效果:
这样就实现了负载均衡了~
yaml配置文件实现service
编写yaml文件:
apiVersion: v1
kind: Service
metadata:
labels:
app: my-dep
name: my-dep
spec:
selector:
app: my-dep
ports:
- port: 8000
protocol: TCP
targetPort: 80
特别注意的参数
⚠️ 在容器内部也可使用域名访问:
[root@k8s-master01 ~]# kubectl exec -it my-dep-6d4ddbf4f7-dckmw -- bin/bash
root@my-dep-6d4ddbf4f7-dckmw:/# curl 100.66.195.42 # ip方式访问
my name is xiongxinwei email:3293172751@qq.com
root@my-dep-6d4ddbf4f7-dckmw:/# curl my-dep.default.svc:8000 # 域名方式访问
my name is xiongxinwei email:xiongxinwei@mail.com
root@my-dep-6d4ddbf4f7-dckmw:/# curl my-dep.default.svc:8000 #也能实现负载均衡
my name is xiongxinwei email:xxw@nsddd.top
注意
在机器上是没办法这样访问的
测试service的服务发现
提示
我们测试一下其中一台主机下线,service继续实现负载均衡
再开启也是恢复到了默认页面,新开启的nginx而不是以前的~
service服务暴露公网nodeport
注意
我们之前的还是只能在服务器内部访问,要想实现在公网访问,我们还可以用另外一种方式
删除之前的my-dep
service
重新暴露:
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort
警告service默认模式
--type=NodePort
:默认情况,集群内部的访问--type=ClusterIP
:设置为集群外部可以访问
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=NodePort
kubectl expose deploy my-dep --port=8000 --target-port=80 --type=ClusterIP
kubectl expose deploy my-dep --port=8000 --target-port=80 #默认情况,集群内部的访问
我们还可以看到暴露的多了一个端口80:31729/TCP
,这个是随机开放的端口。这样的话,我们访问任何一台机器的30948
端口都可以访问~
这个端口是随机暴露的, 但是也是有范围,就是
30000 - 32767
之间,我们可以开启防火墙和vpc的端口转化。
🔥我们可以直接在浏览器上面访问这个页面了~
多端口
多端口时必须配置 name, 文档
apiVersion: v1
kind: Service
metadata:
name: test-k8s
spec:
selector:
app: test-k8s
type: NodePort
ports:
- port: 8080 # 本 Service 的端口
name: test-k8s # 必须配置
targetPort: 8080 # 容器端口
nodePort: 31000 # 节点端口,范围固定 30000 ~ 32767
- port: 8090
name: test-other
targetPort: 8090
nodePort: 32000
说明
与一般的Kubernetes名称一样,端口名称只能包含小写字母数字字符 和 -
。 端口名称还必须以字母数字字符开头和结尾。
例如,名称 123-abc
和 web
有效,但是 123_abc
和 -web
无效。
删除service
kubectl delete svc/kubernetes-bootcamp
END 链接
✴️版权声明 © :本书所有内容遵循CC-BY-SA 3.0协议(署名-相同方式共享)©