k8s 使用ingress-nginx访问集群内部应用

news/2025/2/14 2:47:51/

k8s搭建和部署应用完成后,可以通过NodePort,Loadbalancer,Ingress方式将应用端口暴露到集群外部,提供外部访问。
缺点:
NodePort占用端口,大量暴露端口非常不安全,并且有端口数量限制【不推荐】;
Loadbalancer 非常好用,但是得加钱才行【视情况定】
Ingress 配置稍微复杂,并且需要内部DNS解析转发【推荐】

Ingress-nginx-controller 安装部署见k8s安装ingress-nginx DaemonSet + HostNetwork + nodeSelector
因为Ingress-nginx-controller是部署在k8s集群内部以pod方式运行,是可以访问到集群内部k8s的各个服务的,而只需要将Ingress-nginx-controller监听的80/443端口提供暴露给外部访问,并安装一定规则进行代理转发,即可实现外部通过Ingress-nginx-controller访问到内部应用中。

简易理解ingress 同 svc,pod关系,ingress --转发–> svc --转发–> pods
这里简易部署nginx、tomcat为例:
vi nginx-tomcat-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: default
spec:replicas: 3selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginx-containerimage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCP---apiVersion: apps/v1
kind: Deployment
metadata:name: tomcat-deploymentnamespace: default
spec:replicas: 2selector:matchLabels:app: tomcat-podtemplate:metadata:labels:app: tomcat-podspec:containers:- name: tomcat-containerimage: tomcat:8.5-jre10-slimports:- name: tomcat-portcontainerPort: 8080protocol: TCP

执行部署
kubectl apply -f nginx-tomcat-deployment.yaml

配置nginx和tomcat访问服务svc脚本,监听nginx-80/tomcat-8080端口nginx-tomcat-service.yaml
vi nginx-tomcat-service.yaml

apiVersion: v1
kind: Service
metadata:name: nginx-svcnamespace: default
spec:selector:app: nginx-podtype: ClusterIP     # 默认使用ClusterIP不使用NodePort方式
#  clusterIP: Noneports:- protocol: TCPport: 80targetPort: 80  # 部署的nginx端口---
apiVersion: v1
kind: Service
metadata:name: tomcat-svcnamespace: default
spec:selector:app: tomcat-podtype: ClusterIP       # 默认使用ClusterIP不使用NodePort方式
#  clusterIP: Noneports:- protocol: TCPport: 8080targetPort: 8080  # 部署的tomcat端口

执行部署
kubectl apply -f nginx-tomcat-service.yaml

编写ingress脚本,ingress目的就是访问将指定访问url或域名的配置提交给ingress-nginx-controller做反向代理转发到选择绑定的service中,实现pod应用暴露给外部访问。
nginx-tomcat-ingress.yaml由nginx代理转发到nginx/tomcat的svc端口
vi nginx-tomcat-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-nginx-httpannotations:kubernetes.io/ingress.class: "nginx"  # 必须添加防止访问404
spec:rules:- host: ng.yunzaixin.top                # 配置转发地址http:paths:- path: /pathType: Prefix                   # 前缀匹配backend:service:name: nginx-svc                # 转发到那个svc中port:number: 80                   # 转发到svc中绑定的端口---apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-tomcat-httpannotations:kubernetes.io/ingress.class: "nginx"  # 必须添加防止访问404
spec:rules:- host: tomcat.yunzaixin.top            # 配置转发地址http:paths:- path: /pathType: Prefix                   # 前缀匹配backend:service:name: tomcat-svc               # 转发到那个svc中port:number: 8080                 # 转发到svc中绑定的端口

执行部署
kubectl apply -f nginx-tomcat-ingress.yaml

相当于访问tomcat.yunzaixin.top 或者ng.yunzaixin.top ,ingress-nginx-controller将会转发到nginx-svc或tomcat-svc,nginx-svc或tomcat-svc转发到对应得nginx或tomcat中
在这里插入图片描述

在运行ingress-nginx-controller节点主机上访问:
curl ng.yunzaixin.top
在这里插入图片描述

curl tomcat.yunzaixin.top
在这里插入图片描述


http://www.ppmy.cn/news/1173143.html

相关文章

【Flutter 问题系列第 79 篇】在 Flutter 中使用 ReorderableListView 实现拖拽排序列表组件的功能

这是【Flutter 问题系列第 79 篇】,如果觉得有用的话,欢迎关注专栏。 当前开发环境 Flutter 版本:3.10.5,Dart 版本:3.0.5,操作系统:macOS 文章目录 一:效果演示二:Reor…

J2EE的N层体系结构

J2EE平台采用了多层分布式应用程序模型,实现不同逻辑功能的应用程序被封装到不同的构件中,处于不同层次的构件可被分别部署到不同的机器中。 RMI/IIOP:RMI(Remote Method Invocation,远程方法调用)是Java的…

企业数字化建设有哪些路线可以选择?

企业数字化建设涉及利用数字技术来提高行业的效率、准确性和协作性。在选择企业实施数字化建设的路线时,应该考虑组织的需求和目标的各个方面。可以考虑以下一些路线: 1.项目管理软件:实施项目管理软件,可以更好地规划、调度和跟…

二十三种设计模式全面解析-工厂模式:创造对象的魔法工厂

在软件开发中,有一种神奇的设计模式被称为工厂模式,它能为我们创造对象的魔法工厂。无论你是初学者还是有经验的开发人员,掌握工厂模式都是非常重要的。本文将以通俗易懂的方式,全面解析工厂模式,深入探讨如何使用工厂…

Go+VsCode配置环境

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。 这个教的是如何用Vscode链接远程的服务器,然后在服务器上配置环境,在服…

【RTOS学习】事件组 | 任务通知

🐱作者:一只大喵咪1201 🐱专栏:《RTOS学习》 🔥格言:你只管努力,剩下的交给时间! 事件组 | 任务通知 🚁事件组🛴大概原理🛴使用事件组的函数同步…

flutter开发实战-hero动画简单实现

flutter开发实战-hero动画简单实现 使用Flutter的Hero widget创建hero动画。 将hero从一个路由飞到另一个路由。 将hero 的形状从圆形转换为矩形,同时将其从一个路由飞到另一个路由的过程中进行动画处理。 Flutter Hero动画 Hero 指的是可以在路由(页面)之间“飞行”的 widge…

visual studio Qt 开发环境中手动添加 Q_OBJECT 导致编译时出错的问题

问题简述 创建项目的时候,已经添加了类文件,前期认为不需要信号槽,就没有添加宏Q_OBJECT,后面项目需要,又加入了宏Q_OBJECT,但是发现只是添加了一个宏Q_OBJECT,除此之外没有改动其它的代码,原本…