作者信息:https://home.cnblogs.com/u/huangjiabobk

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

在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的端口,但这不是一个生产环境中的长期解决方案。

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

posted @   黄嘉波  阅读(203)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
版权声明:原创作品,谢绝转载!否则将追究法律责任。--作者 黄嘉波
点击右上角即可分享
微信分享提示