美文网首页
【k8s学习】Kubernetes Service通过exter

【k8s学习】Kubernetes Service通过exter

作者: 伊丽莎白2015 | 来源:发表于2022-07-02 22:27 被阅读0次

    【环境】

    • MacOS
    • minikube version: v1.25.2
    • minikube vm-driver: hyperkit

    1. Service类型

    Kubernetes的Service想要对外暴露,可以通过以下方式:

    1. ClusterIP Service + Ingress
      Service type为ClusterIP时,我们一般认为是internal service,需要借助别的组件对外暴露,比如通过Ingress组件,再转到内部的service上。
      参考:【k8s学习】Kubernetes Ingress介绍
    2. NodePort Service
      Service type为NodePort,通过配置NodePort(范围30000~32767),通过Node本身的IP进行访问。
      参考:【k8s学习】布署Spring Boot项目到minikube上
    3. LoadBalancer Service
      Service type为LoadBalancer,通过配置NodePort(范围30000~32767),通过Node本身的IP进行访问。LoadBalancer Service是NodePort Service的扩展,它弥补了NodePort Service作为集群中一个固定的Node对外暴露的缺点。而是可以将部署在集群中不同的Node间的Service作负载均衡,并对外暴露。
      参考:【k8s学习】在minikube上布署MongoDB和MongoExpress
      参考:【k8s学习】Kubernetes Service介绍

    【本文介绍另一种方式,即通过Cluster Service+配置属性externalIPs的方式对外暴露服务。】

    2. ClusterIP Service使用externalIPs对外暴露服务

    官网:https://kubernetes.io/docs/concepts/services-networking/service/#external-ips

    2.1 准备一个Java Spring Boot项目

    端口为8090,开放了Rest API用来测试,/version,返回字符串:hazelcast k8s test v1

    docker build,docker push一系列操作后,上传到docker hub上。

    2.2 创建deployment,运行。

    kubectl create deployment hazelcast-k8s --image=<your image>

    image.png 可以看到pod在运行了: image.png
    2.3 创建Service:

    这里配置了port为80,即Service自己的端口,targetPort为Pod中的container运行的Spring Boot项目的端口。

    externalIPs为Kubernetes集群节点的IP,我用的是minikube,可以通过命令minikube ip查询:

    apiVersion: v1
    kind: Service
    metadata:
      name: hazelcast-k8s
    spec:
      selector:
        app: hazelcast-k8s
        pod-template-hash: c4b67c848
    
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8090
      externalIPs:
        - 192.168.64.10
    

    创建好后查看service:


    image.png

    在集群外部通过配置的externalIPs即可访问:


    image.png

    【总结】
    所以这里配置的externalIPs听上去像是配置外部的IP,其实配的是service所在的node节点的ip,意思是外部的人可以通过这个ip访问这个service,或者可以理解为这个service对外暴露了,ip为这个externalIP。

    这里的service的port配置的是80,所以我们访问的时候就可以省略端口号了(默认端口号即为80)。

    整个过程为:
    访问url=http://192.168.64.10/version --> 找到type为ClusterIP的service --> 转发给port为8090的container

    如果我们通过NodePort或是LoadBalancer暴露,那么端口因为限定了范围(30000~32767),所以必须要带上端口号访问,而本文这种,可以用默认端口80。另外,在文未的参考文章也对external ip service做了更为详细的介绍。


    参考:
    https://medium.com/swlh/kubernetes-external-ip-service-type-5e5e9ad62fcd

    相关文章

      网友评论

          本文标题:【k8s学习】Kubernetes Service通过exter

          本文链接:https://www.haomeiwen.com/subject/bqwkbrtx.html