开发者社区 > 云原生 > 容器服务 > 正文

阿里云k8s容器服务如何暴露内网路由?

我们现在容器服务中的路由,直接是SLB公网接管的,都走公网流量。

需求:
从ECS中(不在k8s集群内),访问某个容器服务,希望走VPC内网流量

请问如何将容器中某些服务暴露出内网的路由?

展开
收起
原版橘子皮 2023-08-04 14:05:07 270 0
12 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    要将容器服务中的某些服务暴露给位于ECS实例中的应用程序,并通过VPC内网流量进行访问,可以通过以下步骤实现:

    1. 创建一个Kubernetes Service:在Kubernetes集群中,使用Service来暴露容器中的服务。您需要创建一个Service对象,并将其类型设置为NodePortLoadBalancer

      • 对于NodePort类型的Service,您需要手动选择一个端口号,并在Service中将该端口号映射到容器中的服务端口。
      • 对于LoadBalancer类型的Service,您可以使用阿里云负载均衡SLB服务,并将负载均衡实例绑定到VPC网络。
    2. 在ECS实例中配置VPC网络访问:通过配置ECS实例的安全组、VPC网络和路由表,使ECS实例能够通过VPC内网访问Kubernetes集群。

      • 确保ECS实例与Kubernetes集群位于同一VPC网络中。
      • 确保ECS实例所属的安全组允许流量通过所需的端口,并允许与Kubernetes集群所在的子网和VPC网络之间的通信。
    3. 配置SLB内网访问:如果您选择使用LoadBalancer类型的Service,并使用阿里云负载均衡SLB服务,可以配置SLB实例以允许VPC内网访问。

      • 创建一个内网类型的负载均衡实例,并将其绑定到Kubernetes Service。
      • 在负载均衡实例中,配置监听器和转发规则,使其能够在VPC内网上使用所需的端口转发流量到Kubernetes Service。

    通过以上步骤,您可以将容器中的某些服务通过VPC内网流量访问。请确保在进行任何配置更改时,充分了解网络安全的设置和防护策略。

    2023-08-28 16:23:53
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,可以通过阿里云容器服务中的Service和Ingress对象来实现将容器服务暴露出内网的路由。

    1. Service对象:可以使用Service对象将Kubernetes内部服务暴露到Kubernetes集群的外部,提供了一种简单的方式来访问容器内的应用程序。在Service对象中,可以指定service的类型为ClusterIP,这样该服务将会自动分配一个可访问的内部IP地址,可以通过这个IP地址和指定端口来访问容器服务。这样在阿里云容器服务中,这个Service对象会自动注册到阿里云内网的SLB中,可以使用阿里云内网的IP地址来访问服务,从而避免了公网流量。

    2. Ingress对象:使用Ingress对象可以将外部请求路由到Kubernetes集群内的不同Service对象中,通过Ingress对象指定服务的域名和路径,将外部请求路由到对应的Service对象中。在阿里云容器服务中,可以使用内网SLB实现Ingress对象的暴露,这样可以将外部请求通过内网路由到需要访问的Service对象中,从而避免了公网流量。

    在阿里云容器服务中,我们可以通过以下步骤来实现将容器服务暴露出内网的路由:

    1. 创建一个内网类型的SLB,可以通过阿里云控制台或者API来创建。

    2. 在Kubernetes集群中创建一个Service对象,类型为ClusterIP,并且将其指定为阿里云内网SLB的LoadBalancer类型。

    3. 将需要访问的容器服务的Pod添加到这个Service对象中。

    4. 在Kubernetes集群中创建一个Ingress对象,并且将其指定为阿里云内网SLB的LoadBalancer类型。

    5. 在Ingress对象中指定需要暴露的服务的域名和路径,以及将其路由到的Service对象的名称和端口。

    6. 在ECS中添加一条路由规则,将需要访问的服务的域名解析到阿里云内网SLB的IP地址上。

    通过以上步骤,我们就可以将容器服务暴露出内网的路由,从而实现了VPC内网流量访问容器服务。

    2023-08-07 10:24:44
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    要将阿里云容器服务中的某些服务暴露到 VPC 内网,可以通过以下步骤实现:

    1. 创建一个阿里云容器服务(ACK)集群,并确保该集群与您的 VPC 在同一个地域中。确保已经配置了正确的 VPC 网络和子网。

    2. 在 ACK 集群中创建一个 Service,并将其类型设置为 LoadBalancer,指定内网类型。例如,可以使用以下 YAML 配置创建一个 Service:

      apiVersion: v1
      kind: Service
      metadata:
        name: my-service
      spec:
        type: LoadBalancer
        loadBalancerSourceRanges: # 指定允许访问的 IP 段
          - 192.168.0.0/16
        selector:
          app: my-app # 根据应用的标签选择要暴露的 Pod
        ports:
          - protocol: TCP
            port: 80
            targetPort: 8080 # 指定容器中应用的端口号
      

      这将创建一个将流量路由到 Pod 上的内网负载均衡器,并限制允许访问的 IP 段。

    3. 部署应用程序或 Pod 到 ACK 集群中,并为其添加合适的标签以匹配 Service 的选择器。

    4. 您可以通过查看 Service 的内部 IP 地址,以及通过 VPC 内网访问该 IP 地址来验证访问是否成功。

    这样,通过创建一个内网类型的 Service,并通过 VPC 内网访问该 Service 的内部 IP 地址,您就可以将容器中的某些服务暴露到 VPC 内网中,并通过内网流量访问。请注意,确保 VPC 的网络配置和子网范围与 ACK 集群中的配置兼容。

    详细的操作步骤和配置细节,请参考阿里云容器服务(ACK)的官方文档或联系阿里云技术支持获取帮助。

    2023-08-04 23:21:05
    赞同 展开评论 打赏
  • 要在阿里云Kubernetes容器服务中暴露内网路由,你可以按照以下步骤进行:
    image.png

    1. 创建一个Service:首先,需要创建一个Kubernetes Service对象来定义你要暴露的应用。在Service的配置中,将spec.type设置为LoadBalancerNodePort

      • 如果你选择LoadBalancer类型,阿里云容器服务将会自动为你创建一个内网负载均衡器,并分配一个内网IP地址作为入口。

      • 如果你选择NodePort类型,Service将会在每个节点上监听一个随机的端口,并通过节点的IP地址暴露应用。

    2. 配置访问策略:根据你的需求,可以通过spec.externalTrafficPolicy字段配置Service的访问策略。默认情况下,它是Cluster,意味着所有请求都会被转发到Pod。如果你希望只有集群内部的流量才会被转发到Pod,可以将其设置为Local

    3. 应用暴露:保存和应用Service的配置文件,Kubernetes将会自动创建相应的资源。

    4. 获取内网路由:一旦Service创建成功,你可以使用kubectl get services命令获取该Service的内网IP地址或端口号。这些信息将帮助你确定如何访问暴露的应用。

    image.png

    2023-08-04 20:34:05
    赞同 展开评论 打赏
  • ,Service可以对外暴露服务,需要配置公网SLB或内网SLB+EIP。更多信息,请参考通过使用自动创建SLB的服务公开应用或通过使用已有SLB的服务公开应用。
    屏幕截图 2023-07-22 224808.png
    创建Service前需要安装Nginx Ingress Controller组件,安装方式请参见以下操作:
    若需要创建集群,请在组件配置配置向导页面的Ingress字段选中安装Ingress组件。具体操作,请参考创建Kubernetes托管版集群。
    微信截图_20230724183141.png

    2023-08-04 18:51:11
    赞同 展开评论 打赏
  • 可以创建一个类型为LoadBalancer的Service,并指定阿里云的负载均衡器(SLB)为内网类型,这样就可以通过VPC内网进行访问。

    具体的操作步骤:

    1. 创建一个类型为LoadBalancer的Service,例如:

       apiVersion: v1
       kind: Service
       metadata:
         name: my-service
         annotations:
           service.beta.kubernetes.io/alicloud-loadbalancer-address-type: "intranet" # 指定SLB为内网类型
       spec:
         type: LoadBalancer
         selector:
           app: MyApp
         ports:
           - protocol: TCP
             port: 80
             targetPort: 9376
      

      my-service会被暴露为一个内网类型的LoadBalancer服务,它会路由到带有标签app=MyApp的Pod的9376端口。

    2. 应用这个Service到Kubernetes集群:

       kubectl apply -f my-service.yaml
      
    3. 获取Service的内网IP:

       kubectl get svc my-service
      

      命令会显示Service的详细信息,包括内网IP(在EXTERNAL-IP列)。这个IP地址就是阿里云SLB的内网地址。

    4. 在ECS中,您可以使用这个内网IP来访问您的服务。

    这种方式需要ECS和Kubernetes集群在同一个VPC中,或者至少在互相可以访问的VPC中。这可能需要通过配置VPC对等连接或者使用专线连接来实现。
    需要确保ECS有权限访问这个Service,这可能涉及到配置阿里云的安全组规则。

    2023-08-04 18:33:24
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    如果你希望从ECS实例(不在Kubernetes集群内)通过VPC内网流量访问容器服务,你可以通过以下步骤将容器中的某些服务暴露到内网路由:

    创建VPC和子网:首先,确保你已在云平台上创建了VPC(Virtual Private Cloud)和子网,用于承载内网流量。

    创建容器服务:在你的云平台上创建容器服务,确保容器服务与之前创建的VPC和子网相关联。

    配置容器服务:在容器服务中,为你希望暴露内网访问的服务配置合适的网络设置。这可能涉及到定义服务的监听端口、协议和访问策略。

    创建ECS实例:在你的云平台上创建一个ECS实例,并确保该实例与相同的VPC和子网相关联。

    在ECS实例中访问容器服务:通过在ECS实例上执行相应的命令或程序,使用容器服务的内网地址和端口来访问你所需的服务。

    2023-08-04 18:05:10
    赞同 展开评论 打赏
  • 同学你好,其实没那么复杂,只需要配置一些组件即可。

    实现逻辑
    ECS实例通过内网SLB访问Kubernetes集群中的服务

    架构图
    简化文字描述架构图
    ECS > 内网 SLB > Kubernetes Ingress (默认七层) -> Kubernetes Service -> Pod

    操作步骤
    1、创建一个内网SLB实例,并确保它与同一个VPC关联。

    2、在SLB实例中,添加监听器并配置规则,将内网SLB监听的端口与Kubernetes Ingress的服务端口关联。

    2023-08-04 17:54:44
    赞同 展开评论 打赏
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    您好,Service可以对外暴露服务,需要配置公网SLB或内网SLB+EIP。更多信息,请参考通过使用自动创建SLB的服务公开应用或通过使用已有SLB的服务公开应用。
    若存在很多服务模块,例如:微服务场景下,可以对不同服务分配不同的端口,但是使用同一个EIP,可以更加节省EIP与SLB。
    image.png

    请注意,创建Service前需要安装Nginx Ingress Controller组件,安装方式请参见以下操作:
    若需要创建集群,请在组件配置配置向导页面的Ingress字段选中安装Ingress组件。具体操作,请参考创建Kubernetes托管版集群。
    若使用已有集群,可通过组件管理安装Nginx Ingress Controller组件。具体操作,请参考管理组件。

    2023-08-04 17:29:20
    赞同 展开评论 打赏
  • 生成携带内网SLB的Kubernetes服务

    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: tomcat-demo
    labels:
    app: tomcat
    spec:
    replicas: 2
    selector:
    matchLabels:
    app: tomcat
    template:
    metadata:
    labels:
    app: tomcat
    spec:
    containers:

      - name: tomcat
        image: tomcat:latest
        ports:
        - containerPort: 8080
    

    apiVersion: v1
    kind: Service
    metadata:
    name: tomcat-service
    annotations:
    service.beta.kubernetes.io/alicloud-loadbalancer-address-type: intranet
    spec:
    ports:

    • port: 80
      targetPort: 8080
      protocol: TCP
      selector:
      app: tomcat
      type: LoadBalancer

    对这段编排模板创建文本做下解释:使用最新的Tomcat镜像创建两个容器的意思,容器的服务端口是8080,并且创建一个命名为tomcat-service的服务,这个服务前有一个内网SLB,对外服务的端口为80,映射到容器8080的端口。

    在Kubernetes控制台找到服务的内网SLB地址
    现在我们成功创建了一个携带内网SLB的服务,我们可以在Kubernetes控制台的“路由与负载均衡”菜单的“服务”子页面找到这个内网SLB的内网IP:
    image.png

    再去SLB的控制台找到这个SLB的VPC ID和SLB ID,并且使用这个SLB的VPC ID和SLB ID到API网关去授权了。
    image.png

    2023-08-04 16:34:30
    赞同 展开评论 打赏
  • 您可以使用阿里云容器服务的内网负载均衡功能来暴露内网路由。具体步骤如下:

    1. 在容器服务控制台上点击“路由与负载均衡”菜单下的“服务”按钮,点击右上角的“创建”按钮;
    2. 在创建路由页面填写服务对应的域名,所监听的端口等;
    3. 点击“下一步”,选择“内网负载均衡”;
    4. 点击“下一步”,选择“内网负载均衡”;
    5. 点击“下一步”,填写内网负载均衡的名称和描述;
    6. 点击“完成”。
    2023-08-04 15:12:03
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    要在阿里云Kubernetes容器服务中暴露内网路由,可以使用Service和Ingress资源来实现。以下是一般的步骤:

    1. 创建一个Deployment或StatefulSet来运行你的应用程序或服务。

    2. 创建一个Service资源,将它与你的Deployment或StatefulSet关联起来。在Service资源中,将spec.type设置为ClusterIP,这将为你的服务创建一个内部集群IP地址。

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      type: ClusterIP
      selector:
        app: my-app
      ports:
        - port: 80
          targetPort: 8080
    
    1. 创建一个Ingress资源,将它与你的Service资源关联。在Ingress资源中,你可以指定需要暴露的域名、路径和后端服务。
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
        - host: example.com
          http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: my-service
                    port:
                      number: 80
    
    1. 配置阿里云负载均衡器,使其支持Ingress。具体操作可以参考阿里云负载均衡文档中的相关指南。

    2. 在配置完成后,可以通过访问Ingress规则中指定的域名或路径,从内网中访问你的服务。

    2023-08-04 14:16:36
    赞同 展开评论 打赏
滑动查看更多

国内唯一 Forrester 公共云容器平台领导者象限。

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 相关电子书

    更多
    从Docker到容器服务 立即下载
    基于阿里云容器服务 实现Serverless服务 立即下载
    容器加速企业创新阿里云容器服务 立即下载

    相关镜像