• kubernetes-service详解


    kubernetes-service详解

    一、Service


    • 虽然每个Pod都会分配一个单独的Pod IP,然而却存在如下两问题:
      • Pod IP 会随着Pod的重建产生变化
      • Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问

    这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。

    Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。

    操作一:创建集群内部可访问的Service

    #创建
    [root@master ~]# kubectl create ns yhm
    namespace/yhm created
    [root@master ~]# kubectl create deploy nginx --image=nginx:latest --port=80 --replicas=3 -n yhm
    deployment.apps/nginx created
    
    #暴露Service
    [root@master ~]# kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n yhm
    service/svc-nginx1 exposed
    
    # 查看service
    [root@master ~]# kubectl get svc svc-nginx1 -n yhm -o wide
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
    svc-nginx1   ClusterIP   10.109.147.6   <none>        80/TCP    26s   app=nginx
    
    # 这里产生了一个CLUSTER-IP,这就是service的IP,在Service的生命周期中,这个地址是不会变动的
    # 可以通过这个IP访问当前service对应的POD
    
    [root@master ~]# kubectl get svc svc-nginx1 -n yhm -o wide
    NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE   SELECTOR
    svc-nginx1   ClusterIP   10.109.147.6   <none>        80/TCP    89s   app=nginx
    [root@master ~]# curl 10.109.147.6
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to nginx!</title>
    <style>
    html {
        color-scheme: light dark; }
    body {
        width: 35em; margin: 0 auto;
    font-family: Tahoma, Verdana, Arial, sans-serif; }
    </style>
    </head>
    <body>
    <h1>Welcome to nginx!</h1>
    <p>If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.</p>
    
    <p>For online documentation and support please refer to
    <a href="http://nginx.org/">nginx.org</a>.<br/>
    Commercial support is available at
    <a href="http://nginx.com/">nginx.com</a>.</p>
    
    <p><em>Thank you for using nginx.</em></p>
    </body>
    </html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    操作二:创建集群外部也可访问的Service

    # 上面创建的Service的type类型为ClusterIP,这个ip地址只用集群内部可访问# 如果需要创建外部也可以访问的Service,需要修改type为NodePort
    [root@master ~]# kubectl expose deploy nginx --name=svc-nginx2 --type=NodePort --port=80 --target-port=80 -n yhm
    service/svc-nginx2 exposed
    
    # 此时查看,会发现出现了NodePort类型的Service,而且有一对Port(80:32349/TCP )
    [root@master ~]# kubectl get svc  svc-nginx2  -n yhm -o wide
    NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE   SELECTOR
    svc-nginx2   NodePort   10.109.247.254   <none>        80:31403/TCP   38s   app=nginx
    
    # 接下来就可以通过集群外的主机访问 节点IP:31403访问服务了# 例如在的电脑主机上通过浏览器访问下面的地址http://192.168.223.176:31403/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    删除Service

    [root@master ~]#  kubectl delete svc svc-nginx2 -n yhm
    service "svc-nginx2" deleted
    
    • 1
    • 2

    配置方式
    创建一个svc-nginx.yaml,内容如下:

    [root@master ~]# vim svc-nginx.yaml
    [root@master ~]# cat svc-nginx.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-nginx
      namespace: yhm
    spec:
      clusterIP: 10.109.247.254
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        run: nginx
      type: ClusterIP
    [root@master ~]# kubectl create -f svc-nginx.yaml
    service/svc-nginx created
    [root@master ~]# kubectl delete -f svc-nginx.yaml
    service "svc-nginx" deleted
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    二、pod详解


    pod的资源清单

    apiVersion: v1     #必选,版本号,例如v1
    kind: Pod         #必选,资源类型,例如 Pod
    met
    • 1
    • 2
  • 相关阅读:
    深入学习JVM底层(五):类加载机制
    项目申请理论理解---2022.8月
    证券投资方向,什么论文选题好写且可参考数据多呢?
    知识表示学习(七):TransGCN
    如何用AR Engine环境Mesh能力实现虚实遮挡
    zabbbix从4.0升级到5.0(服务端和客户端)
    vim创建文件
    Linux- dup()系统调用
    Dubbo 接口测试原理及多种方法
    简易实现通讯录3.0 (实现文件操作)
  • 原文地址:https://blog.csdn.net/weixin_72898433/article/details/128106648