基于k8s部署的应用(服务)如何访问

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
简介: 当我们使用k8s部署了一套应用时(比如一个blog系统),要怎么访问它便成了我们最直接的问题,这里的访问应该同时包括了对外(tomcat)和对内(mysql)服务。 要弄清楚这个问题,首先我们需要了解kubernetes网络模型设计的基础原则: 每个pod都拥有一个独立的ip地址,而且假定所有的pod都在一个直接连通的、扁平的网络空间中。

当我们使用k8s部署了一套应用时(比如一个blog系统),要怎么访问它便成了我们最直接的问题,这里 的访问应该同时包括了对外(tomcat)和对内(mysql)服务。

要弄清楚这个问题,首先我们需要了解kubernetes网络模型设计的基础原则:

每个pod都拥有一个独立的ip地址,而且假定所有的pod都在一个直接连通的、扁平的网络空间中。

回到题目的问题,我们这里分两步分讨论:

1. 集群内部访问

1.1 通过pod的ip访问

通过这种方式访问是不可靠的,因为当pod重启后,它的ip会重新分配

1.1.1 因为pod中所有容器共享一个网络堆栈(pod的ip地址是docker0分配的),所以同一个pod中的容器可以通过localhost来互相访问

1.1.2 不同pod的容器访问可以使用endpoint方式:pod的ip+容器的端口

1.2 通过服务访问

通过创建service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,这个地址不会因为pod的重启而发生改变,所以是可靠的。

访问方式:服务的clusterIP(这个是系统分配的全局唯一ip)+containerPort(应用容器的端口)

2. 集群外部访问

2.1 直接访问容器

在启动pod的rc/deployment中指定容器的hostport,并设置pod级别的hostwork=true,这样直接通过主机ip+hostport就可以实现访问

2.2 通过service访问

2.2.1 NodePort方式

在service.yaml中配置nodeport参数,这一集群会在每一个node上为需要外部访问的service开启一个TCP监听端口,外部系统只需要用任意一个Node的IP地址+具体的NodePort端口号就可访问此服务。不过这种方式没有解决node层负载均衡的问题(pod层kube-proxy会自动实现负载分发到多个pod上,但node层不能负载分发到多个node)

2.2.2 如果使用公有云平台(如aws、azure、openstack、gce等)部署时,可以用loadbalance方式,配置外部负载均衡器,对service的请求会通过loadbalance转发到后端pod

2.3 Ingress

Ingress也是k8s中单独定义的对象,它的作用就是实现对外暴露访问的负载均衡,它和Service本身LoadBalancer的区别在于:

- Ingress支持L4、L7负载均衡,LoadBalancer设计上只支持L4;

- Ingress基于Pod部署,并将Pod网络设置成external network;

- Ingress controller支持Nginx、Haproxy、GCE-L7,能够满足企业内部使用。

b1a1f72eafa7d85bfdbcb88e7e5b9c08a64c8c8b

本文转自CSDN-基于k8s部署的应用(服务)如何访问

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
24天前
|
存储 Kubernetes 容器
K8S部署nexus
该配置文件定义了Nexus 3的Kubernetes部署,包括PersistentVolumeClaim、Deployment和服务。PVC请求20Gi存储,使用NFS存储类。Deployment配置了一个Nexus 3容器,内存限制为6G,CPU为1000m,并挂载数据卷。Service类型为NodePort,通过30520端口对外提供服务。所有资源位于`nexus`命名空间中。
|
21天前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
45 2
|
1月前
|
人工智能 Kubernetes 安全
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
赋能加速AI应用交付,F5 BIG-IP Next for Kubernetes方案解读
65 13
|
1月前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
2月前
|
Kubernetes Cloud Native 微服务
云原生入门与实践:Kubernetes的简易部署
云原生技术正改变着现代应用的开发和部署方式。本文将引导你了解云原生的基础概念,并重点介绍如何使用Kubernetes进行容器编排。我们将通过一个简易的示例来展示如何快速启动一个Kubernetes集群,并在其上运行一个简单的应用。无论你是云原生新手还是希望扩展现有知识,本文都将为你提供实用的信息和启发性的见解。
|
2月前
|
Kubernetes 监控 安全
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用
|
2月前
|
存储 Kubernetes Devops
Kubernetes集群管理和服务部署实战
Kubernetes集群管理和服务部署实战
73 0
|
Kubernetes 开发者 微服务
简化Kubernetes应用部署工具-Helm之Hook
本文讲的是简化Kubernetes应用部署工具-Helm之Hook【编者的话】微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起,该公司已经被微软收购。
2569 0
|
6天前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。