k8s1.17-Service 创建、查看、删除命令

创建 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

原文出处:/show_1IX6KsBMddqX.html