首页 > 其他分享 >在k8S中,外部如何访问集群内的服务?

在k8S中,外部如何访问集群内的服务?

时间:2024-02-10 15:22:19浏览次数:222  
标签:http name Service 外部 访问 service 集群 k8S my

在Kubernetes (k8s) 中,要让外部客户端能够访问集群内的服务,通常有以下几种方式:

  1. NodePort:

    • 创建一个类型为NodePort的服务,这会在每个工作节点上开放一个特定端口(系统自动分配或用户指定的范围内的端口),并将流量转发到对应Service背后的Pod。外部客户端可以通过任意节点的IP地址和这个NodePort来访问集群内部服务。

    示例:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      type: NodePort
      ports:
      - name: http
        port: 80
        targetPort: 8080
        nodePort: 30080
    
  2. LoadBalancer:
    • 如果您的环境支持云提供商的负载均衡器(如AWS、GCP、Azure等),可以创建类型为LoadBalancer的服务。Kubernetes会自动配置一个外部负载均衡器,并将其指向Service。外部客户端通过负载均衡器的公网IP地址访问服务。

    示例:

       apiVersion: v1
       kind: Service
       metadata:
         name: my-service
       spec:
         selector:
           app: MyApp
         type: LoadBalancer
         ports:
         - name: http
           port: 80
           targetPort: 8080
    
  3. Ingress Controller:

    • 使用Ingress资源与Ingress控制器结合,可以定义HTTP(S)路由规则,并将外部请求代理到不同的Service。这种方式适合多个服务共享同一个入口点,并且可以根据URL路径进行路由选择。

    示例:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: my-app.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  name: http
    
  4. ExternalIPs:

    • 对于具有固定外部IP地址的集群节点,可以在Service中直接指定externalIPs字段,这样就可以从这些特定的外部IP地址访问服务。

    示例:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: MyApp
      type: ClusterIP
      externalIPs:
      - 192.0.2.10
      ports:
      - name: http
        port: 80
        targetPort: 8080
    
  5. Port Forwarding:

    • 在开发和测试阶段,可以直接使用kubectl工具将本地端口映射至集群内Pod的端口,但这不是一个生产环境中的长期解决方案。

综上所述,每种方法的选择取决于具体的应用场景、网络架构以及对安全性和可扩展性的要求。

标签:http,name,Service,外部,访问,service,集群,k8S,my
From: https://www.cnblogs.com/huangjiabobk/p/18012893

相关文章

  • 在k8S中,Headless Service是什么?
    在Kubernetes(k8s)中,HeadlessService是一种特殊类型的Service,它不会被分配一个ClusterIP(集群内部的虚拟IP地址),而是直接将服务背后的PodIP地址暴露给客户端。当创建HeadlessService时,其spec.clusterIP字段设置为"None"。HeadlessService的主要特征和用途包括:DNS解析:Kuberne......
  • 在k8S中,Servic类型有哪些?
    在Kubernetes(k8s)中,Service是用于定义一组Pod的访问策略和机制的资源对象。以下是KubernetesService支持的主要类型:ClusterIP:这是默认的服务类型。创建一个仅集群内部可访问的虚拟IP地址(VIP)。应用程序只能通过内部集群DNS名称从集群内的其他Pod或服务访问这个Service。No......
  • 在k8S中,Service分发后端的策略是什么?
    在Kubernetes(k8s)中,Service可以使用多种策略来分发流量到后端Pod。以下是一些主要的分发策略:ClusterIP(默认策略):Service会获取一个仅集群内部可访问的虚拟IP(ClusterIP),kube-proxy组件根据Service定义的SessionAffinity(如启用)和负载均衡策略将请求转发到后端Pod池。R......
  • 在k8S中,自动扩容机制是什么?
    在Kubernetes(k8s)中,自动扩容机制主要用于根据资源使用情况动态调整Pod副本的数量,以确保服务的稳定性和高效性。主要实现这一功能的组件是HorizontalPodAutoscaler(HPA)。HorizontalPodAutoscaler工作原理如下:监控指标:HPA通过与KubernetesMetricsServer或者其他的自定......
  • Mac电脑安装RedisCluster集群(非Docker模式)
    第1步,新建redis.confredis.conf内容如下:port7021cluster-enabledyes              //启用集群模式cluster-config-filenodes.conf     //集群的配置文件cluster-node-timeout5000appendonlyyesdaemonizeyesbind0.0.0.0   ......
  • Kafka 3.6.1 集群安装与部署
    1.集群规划hadoop02(192.168.58.130)hadoop03(192.168.58.131)hadoop04(192.168.58.132)zookeeperzookeeperzookeeperkafkakafkakafka2.集群部署1.下载kafka二进制包https://kafka.apache.org/downloads2.解压mkdir/usr/kafkatar-zxvf/home/kafka_2......
  • JAVA的4种访问修饰符
    1、基本介绍补充:1属性和方法可以用四种访问修饰符修饰;类只能用public和默认修饰符修饰,且一个.java文件中只能有一个public修饰的类作为主类,其他类用默认修饰符修饰。2访问权限起作用的情况:①在一个类中定义另一个类的对象,当访问该对象的属性或方法时,修饰符根据同类、同......
  • 在k8S中,deployment升级策略是什么?
    在Kubernetes(k8s)中,Deployment的升级策略主要指的是在更新Pod副本以部署新的容器镜像或配置时所采用的方法。主要有两种内置的升级策略:滚动更新(RollingUpdate):这是Deployment默认使用的升级策略。在滚动更新中,Deployment控制器会按批次替换现有的Pod,每次只替换一部......
  • 在k8S中,DaemonSet类型的资源特性有哪些?
    Kubernetes(k8S)中的DaemonSet是一种控制器资源,它具有以下关键特性:每个节点运行一个实例:DaemonSet确保集群中的每个节点(满足特定条件的节点)上都运行一个Pod副本。这意味着无论何时创建或加入新的节点到集群中,DaemonSet都会自动为新节点调度和管理一个Pod。目标节点......
  • 在k8S中,初始化容器(init container)概念原理是什么?
    在Kubernetes(k8S)中,初始化容器(InitContainer)是一个特殊类型的容器,它会在应用程序容器启动之前运行。它的主要目的是执行一些必要的先决条件任务,这些任务必须在主应用容器开始服务前完成。初始化容器的概念原理如下:顺序执行:Pod中可以定义多个初始化容器,它们按照配置文件......