创建 service 的命令
命令格式:
kubectl expose deploy pod控制器名 --name=Service名字 --type=网络类型 --port=Service端口 --target-port=pod中程序的端口
解释:
创建 Service 时,需要指定 pod 控制器,该控制器管理的 pod,都可以使用该 service。即使 pod 删除重建,也可以使用
--type:网络类型ClusterIP:集群内部可访问,注意大小写NodePort:集群外部可访问,注意大小写
--port=Service端口 --target-port=pod中程序的端口:外部程序访问Service端口,service就该请求转发给pod中程序的端口
创建Service 1 - 集群内部可访问
kubectl expose deploy nginx --name=svc-nginx --type=ClusterIP --port=80 --target-port=80 -n test2
执行结果如下:
service/svc-nginx1 exposed
查看service
kubectl get svc -n test2 -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
svc-nginx ClusterIP 10.108.69.169 <none> 80/TCP 40s run=nginx
可以查看到service, CLUSTER-IP 是 10.108.69.169,这就是 service的IP,在Service的生命周期中,这个 地址是不会变动的
集群内部访问 pod 中的程序
可以在 集群服务器上(即:master、node1、node2),通过 service 的 ip 访问 pod 中的程序
好处:service 的 ip 是固定的。不想 pod,删除重建后,ip 会改变
缺点:只能在集群服务器上(即:master、node1、node2)访问 pod 中的程序
提示: 访问速度慢,参见:k8s1.17-Service ClusterIP 访问服务过慢 解决
在 master、node1、node2 任意服务器上执行下面命令:
curl 10.108.69.169:80
执行结果如下:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
</head>
<body>
<h1>Welcome to nginx!</h1>
.......
</body>
</html>
创建Service 2 - 集群外部可访问
需要创建外部也可以访问的Service,需要修改type为 NodePort
kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n test2
显示如下表示成功:
service/svc-nginx2 exposed
查看service
kubectl get svc -n test2
显示如下,有 NodePort 类型的Service:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc-nginx ClusterIP 10.108.69.169 <none> 80/TCP 40m
svc-nginx2 NodePort 10.97.178.143 <none> 80:31132/TCP 4s
注意: 端口是 80:31132,外部服务要访问 31132 端口,service 会将请求转发给 80 端口
其他电脑访问
在 Windows 电脑可以通过 service 的 IP 访问服务
例如在的电脑主机上通过浏览器访问下面的地址
http://192.168.90.100:31928/
删除Service
kubectl delete svc svc-nginx2 -n test2
显示如下表示成功:
service "svc-nginx2" deleted
yaml配置方式
创建 svc-nginx.yaml 文件:
vim svc-nginx.yaml
按 i 键
复制粘贴下面内容:
apiVersion: v1
kind: Service # 表示是 service 的配置
metadata:
name: svc-nginx # service名字
namespace: test2 # 所在命名空间
spec:
clusterIP: 10.109.179.231 # service的固定ip,不写就随机分配
ports:
- port: 80 # service 端口
protocol: TCP # 网络协议
targetPort: 80 # 转发给 pod 的端口
selector:
run: nginx # 选择标签是 run=nginx 的 pod
type: NodePort # 网络类型
按 esc,:wq 保存退出
创建
kubectl create -f svc-nginx.yaml
删除
kubectl delete -f svc-nginx.yaml