• k8s入门之Service(六)


    将一组pod公开为网络服务,通过service代理,可以实现负载均衡

    一、ClusterIP

    此方式只能在集群内访问

    1.使用命令暴露已存在的pod

    (1)继续使用前面章节的案例,查看名称为nginx的deploy下的pod

    kubectl get pod -n dev -owide
    

    进入每个pod容器,更改index.html内容

    kubectl exec nginx-6799fc88d8-2rf2c -it /bin/bash -n dev
    cd /usr/share/nginx/html/
    rm -rf index.html
    touche index.html
    echo 1111 >> index.html
    
    kubectl exec nginx-6799fc88d8-rnhmd -it /bin/bash -n dev
    cd /usr/share/nginx/html/
    rm -rf index.html
    touche index.html
    echo 2222 >> index.htm
    

    (2)使用curl命令访问pod的ip,查看更改后的结果

    (3)通过ClusterIP的方式暴露pod,默认就是ClusterIP

    kubectl expose deploy nginx  --name=svc-nginx --port=8000 --target-port=80 --type=ClusterIP -n dev
    

    (4)查看暴露后的service

     kubectl get svc -n dev
    

    可以看到分配了一个ClusterIP

    (5)访问ClusterIp,查看结果

    service把请求负载均衡的分发给后面代理的pod进行处理,可以看到输出结果不一样

    (6) 在容器内部通过域名的方式访问:服务名.命名空间.svc:port

    进入某个pod容器

    kubectl exec nginx-6799fc88d8-2rf2c -n dev -it /bin/bash
    

    在容器内部执行curl命令访问服务的域名

    2.删除服务

     kubectl delete svc svc-nginx -n dev
    

    3.通过yaml创建服务

    编写svc-nginx.yaml文件

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: svc-nginx
      name: svc-nginx
      namespace: dev
    spec:
      selector:
        #选择指定标签的Deployment
        app: nginx
      type: ClusterIP
      ports:
      - port: 8000
        protocol: TCP
        targetPort: 80
    

    创建nginx服务

    kubectl apply -f svc-nginx.yaml
    

    二、NodePort

    此方式不仅能在集群内访问,也可以在集群外部访问,NodePort范围在 30000-32767 之间

    1.使用命令暴露已存在的pod

    (1)继续使用前面章节的案例,查看名称为nginx的deploy下的pod

    kubectl get pod -n dev -owide
    

    进入每个pod容器,更改index.html内容

    kubectl exec nginx-6799fc88d8-2rf2c -it /bin/bash -n dev
    cd /usr/share/nginx/html/
    rm -rf index.html
    touche index.html
    echo 1111 >> index.html
    
    kubectl exec nginx-6799fc88d8-rnhmd -it /bin/bash -n dev
    cd /usr/share/nginx/html/
    rm -rf index.html
    touche index.html
    echo 2222 >> index.htm
    

    (2)使用curl访问pod的ip查看更改后的结果

    (3)通过NodePort的方式暴露pod,不指定--name参数,service的名称默认为deploy的名称

    kubectl expose deploy nginx --port=8000 --target-port=80 --type=NodePort -n dev
    

    (4)查看暴露后的service

     kubectl get svc -n dev
    

    (5)在集群内访问ClusterIp,查看结果

    service把请求负载均衡的分发给后面代理的pod进行处理

    (6)在集群外访问

    2.删除服务

    kubectl delete svc nginx -n dev
    

    3.通过yaml创建服务

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: svc-nginx
      name: svc-nginx
      namespace: dev
    spec:
      selector:
        #选择指定标签的Deployment
        app: nginx
      #注意指定type为NodePort
      type: NodePort
      ports:
      - port: 8000
        protocol: TCP
        targetPort: 80
        #指定暴露的端口号,不设置就默认随机一个
        #nodePort: 31234
    

    创建成功之后,可以使用上面介绍的方法来查看测试服务

  • 相关阅读:
    React报错之map() is not a function
    基于显扬科技自主研发3D机器视觉HY-M5在刹车片检测的应用
    利用PPT导出一张高清图的方法,office与WPS只需要使用一个即可,我使用的是office。
    中国大陆IP段(含港澳)【2024-04-25】APNIC lasted 2024-04-25
    港科夜闻|香港科大(广州)校长倪明选教授出席江门双碳实验室第一届理事会一次会议...
    【python技巧】替换文件中的某几行
    DevOps理念:开发与运维的融合
    AI智能识别如何助力PDF,轻松实现文档处理?
    开发者,云原生数据库是未来吗?
    玩转ChatGPT:Kimi测评(科研写作)
  • 原文地址:https://www.cnblogs.com/chuandao/p/16176636.html