Springcloud应用在阿里云Kubernetes上的IP互通实践

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Springcloud在阿里云的kubernetes上IP互通的实践

问题

在应用微服务化方案中,Springcloud是比较常见的选择,毕竟其对于Java 的程序员来说比较友好,基于Springboot的编程方式也使得门槛比较低。但是在将Springcloud的应用运行到Kubernetes容器化平台的时候,对于集群外的Client要访问集群内的服务就变得不是那么容易了。因为通常的Kubernetes部署有以下约束:

  • POD的IP段是独立的IP段,对于集群外的机器是不可访问
  • Springcloud的服务做服务注册的时候,注册的是POD的IP
  • Springcloud的客户端从Eureka上获取服务的IP是POD的IP,从而造成集群外机器访问该POD的IP是不通的。

解决方案

方案一: Host network

部署的时候,以host network的方式部署Springcloud的服务应用。这个方式虽然简单,但是其利用的是port mapping的方式,在同一个node节点部署多个实例时,容易造成端口冲突的问题,在kubernetes环境下,一般不建议使用

方案二:Bridge network/Macvlan/Vlan

利用CNI的bridge/Macvlan网络模式,或者是网络插件的Vlan模式(如Contiv),将POD的IP段设置成与主机IP段在同一个段内 ,通过配置交换机的路由,使其能够互访。
但是这里面有一定的局限性,特别是在公有云上,是无法在虚拟网络里再构建这些二层网络的。

方案三:将集群外的机器也纳入集群内管理,但是不运行POD(建议)

依然是将POD的IP段设置为独立的IP段,和主机IP段隔离。但是将集群外的机器,也纳入集群内:安装对应的kubectl, kubeproxy。这样在这台机器是可以直接访问POD的IP的。为了不让这些机器接受调度请求而运行对应的POD,需要认为将这些机器设置为非容器调度节点就可:

kubectl cordon <node-name>

如果不小心在上面已经了POD,则可以将这些POD驱离:

kubectl drain <node-name>

被驱离的node节点会显示SchedulingDisabled的状态:
Snip20180625_59

需要注意的是,可能某些DaemonSet已经在上面运行POD(如flexvolume, kube-proxy等),则忽略就可。这些DaemonSet通常占用资源很少,无需担忧起损耗

kubectl cordon <node-name> --ignore-daemonsets

如果在合适的时候,觉得这个node节点也可以加入kubernetes集群,则一条命令就搞定了:

kubectl uncordon <node-name>

在阿里云的kubernetes服务中,建议采用这种方式运行。

一个具体例子:

  • 在阿里云上通过Kubernetes容器服务,构建一个3 master+3 node的集群用来运行Springcloud的服务。
  • 部署Eureka服务到Kubernetes集群中,可以参考扩展阅读部分的章节(也可以部署在Kubernetes集群外)
  • 将要在集群外部署不是容器的Springcloud的客户端程序所在的ECS通过Kubernetes集群添加现有云服务器的方式纳入集群管理(注意,这些ECS必须和Kubernetes集群的ECS在同一个VPC)

image

  • 成功添加后,再将该机器设置为非调度节点即可
  • 部署Springcloud的客户端程序

如果特殊情况的确需要将POD的IP段设置成ECS主机所在的VPC的一个段内,则需要特殊处理,请咨询对应的阿里云的服务同学。但是不建议该模式。

扩展阅读

更多Springcloud在kubernetes的实践,可以参考osswangxining同学的系列文章:

第一篇:分布式服务注册与发现系统
第二篇:分布式配置管理系统
第三篇:API网关服务Zuul 系统
第四篇:分布式追踪系统
第五篇:分布式弹性服务与容错处理框架Hystrix及其监控仪表板
第六篇:熔断器聚合监控Hystrix Turbine

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
148 2
|
21天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
69 16
|
25天前
|
人工智能 自然语言处理 Java
Spring Cloud Alibaba AI 入门与实践
本文将介绍 Spring Cloud Alibaba AI 的基本概念、主要特性和功能,并演示如何完成一个在线聊天和在线画图的 AI 应用。
255 7
|
2月前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
2月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
2月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
184 5
|
3月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
3月前
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
69 1
|
3月前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
91 1
|
3月前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
82 1

相关产品

  • 容器服务Kubernetes版