将Pod公开为网络服务的抽象方法

1.当前Pod的访问方式

  1. 查看Pod的详细情况

image.png

  1. 在各个节点均可访问

image.png

  1. 问题:前端访问这个应用,需要知道3个pod的ip。显然不合适。
  2. 解决方式

K8s服务-Service - 图3

2.创建Service

image.png

2.1命令行方式

  1. 创建Service

    1. #暴露Deploy
    2. kubectl expose deployment my-dep --port=8000 --target-port=80

    image.png

    1. #使用标签检索Pod
    2. kubectl get pod -l app=my-dep

    image.png

  2. 查看Service

    1. #查看service
    2. kubectl get svc

    image.png

  3. 尝试访问

可以尝试访问,仅限于三台服务器,以及Pod内。和pod的访问范围一样。
curl 10.96.163.244:8000

  1. 负载均衡验证
    1. 分别在三个Pod中的index.html写入不同的值
    2. 在任意云主机控制台访问curl 10.96.163.244:8000

image.png

  1. 域名方式访问,只能在Pod内进行

curl my-dep.default.svc:8000
image.png

  1. 删除已经创建的service

    1. kubectl delete svc xxx

    image.png

    2.2yaml文件方式

  2. 配置文件

    1. #vi my-dep-service.yaml
    2. apiVersion: v1
    3. kind: Service
    4. metadata:
    5. labels:
    6. app: my-dep
    7. name: my-dep
    8. spec:
    9. selector:
    10. app: my-dep
    11. ports:
    12. - port: 8000
    13. protocol: TCP
    14. targetPort: 80
    1. kubectl apply -f xxx.yaml

    3.ClusterIp模式

image.png
默认的创建就是ClusterIp模式。集群内可以访问

  1. # 等同于没有--type的
  2. kubectl expose deployment my-dep --port=8000 --target-port=80 --type=ClusterIP
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. labels:
  5. app: my-dep
  6. name: my-dep
  7. spec:
  8. ports:
  9. - port: 8000
  10. protocol: TCP
  11. targetPort: 80
  12. selector:
  13. app: my-dep
  14. type: ClusterIP

4.NodePort模式

image.png

可以通过外网访问

  1. kubectl expose deployment my-dep --port=8000 --target-port=80 --type=NodePort

image.png
image.png