k8s 中的 ingress 使用细节
创始人
2024-04-04 09:41:20
0

k8s中的ingress

什么是ingress

k8s 中使用 Service 为相同业务的 Pod 对象提供一个固定、统一的访问接口及负载均衡的能力,那么这些 Service 如何被外部的应用访问,其中常用的就是借助于 Ingress对象。

Ingress 是 Kubernetes 中的一个资源对象,用来管理集群外部访问集群内部服务的方式。

Ingress 对象由 Ingress Controller 和 Ingress 策略设置来共同完成。

  • Ingress 策略:用来配置不同的转发规则;

  • Ingress Controller :Ingress 对象的域名解析都由 Ingress Controller 来完成,Ingress Controller 就是一个反向代理程序,它负责解析 Ingress 的反向代理规则,如果 Ingress 有增删改的变动,所有的 Ingress Controller 都会及时更新自己相应的转发规则,当 Ingress Controller 收到请求后就会根据这些规则将请求转发到对应的 Service。

Ingress 如何使用

这里来个简单的 demo 来看下 Ingress 如何使用

1、部署ingress-controller

首先来部署下 Ingress Controller 这是使用的是 ingress-nginx

使用的 k8s 版本是 v1.19.9,所以这里选择的 ingress-nginx 是 v1.1.3

里面的镜像是需要FQ的,这里打包了镜像到 docker-hub 安装脚本

$ kubectl apply -f deploy.yaml

2、部署应用

cat <./go-web.yaml
# deployment
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: go-webname: go-webnamespace: study-k8s
spec:replicas: 5selector:matchLabels:app: go-webstrategy: {}template:metadata:creationTimestamp: nulllabels:app: go-webspec:containers:- image: liz2019/test-docker-go-hubname: go-app-containerresources: {}
status: {}---
# service
apiVersion: v1
kind: Service
metadata:name: go-web-svclabels:run: go-web-svc
spec:selector:app: go-webports:- protocol: TCPport: 8000targetPort: 8000name: go-web-http---
# ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: go-web-ingressannotations:kubernetes.io/ingress.class: nginx
spec:rules:- host: www.go-web.comhttp:paths:- path: /indexpathType: Prefixbackend:service:name: go-web-svcport:number: 8000
EOF

在最下面放了 ingress 的配置,通过 path: /index 将 ingress 请求转发到 go-web-svc 的 service。

➜  ~ kubectl get ingress -n study-k8s
NAME             CLASS    HOSTS            ADDRESS                       PORTS   AGE
go-web-ingress      www.go-web.com   192.168.56.112,192.168.56.111   80      28m

访问

$ curl '192.168.56.111:80/index' \
--header 'Host: www.go-web.com'

hello world

你好
%

ingress 使用细节

1、一个集群中可以有多个 Ingress Controller, 在 Ingress 中可以指定使用哪一个Ingress Controller

2、多个 Ingress 规则可能出现竞争;

3、Ingress 可以为多个命名空间服务;

4、关于如何暴露 ingress 服务,让外面的服务访问到?

1、Ingress Controller 用 Deployment 方式部署,给它添加一个 Service,类型为 LoadBalancer,这样会自动生成一个 IP 地址,通过这个 IP 就能访问到了,并且一般这个 IP 是高可用的(前提是集群支持 LoadBalancer,通常云服务提供商才支持,自建集群一般没有);

2、使用 hostPort;

  • 1、Ingress Controller 用 DaemonSet 方式部署,使用集群内部的某个或某些节点作为边缘节点,给 node 添加 label 来标识,使用 nodeSelector 绑定到边缘节点,保证每个边缘节点启动一个 Ingress Controller 实例,用 hostPort 直接在这些边缘节点宿主机暴露端口,然后我们可以访问边缘节点中 Ingress Controller 暴露的端口,这样外部就可以访问到 Ingress Controller 了;

  • 2、使用亲和性调度策略,使需要部署 Ingress Controller 的节点,每个节点都有一个 Ingress Controller 部署,然后用 hostPort 直接在这些边缘节点宿主机暴露端口,我们就能通过这些节点的 IP 和 hostPort来访问 Ingress Controller 了。

我们上面部署 Ingress Controller 的方式就是使用的 hostPort 对外暴露端口。

相关内容

热门资讯

招商港口高管变更,刘利兵辞任总... 雷达财经 文|冯秀语 编|李亦辉 12月30日,招商局港口集团股份有限公司(证券简称:招商港口,证券...
原创 吉... 吉利把欣旺达给告了,索赔超23亿元! 12月26日晚间,欣旺达发布公告称,公司子公司欣旺达动力在2...
特朗普称明年1月公布美联储主席... 据新华社消息,美国总统特朗普29日说,他预计明年1月宣布美国联邦储备委员会主席鲍威尔的继任人选。 鲍...
吉利起诉欣旺达——大厂自己造电... 导语 从合资建厂到对簿公堂,昔日伙伴反目,背后是中国新能源汽车行业权力游戏的根本性转变。 近日,一则...
2026年“两新”政策部署来了 优化支持范围!2026年“两新”政策部署来了 新华社北京12月30日电(记者魏玉坤、魏弘毅)国家发展...
也迪律师说法:员工被登记为分公... 紫金财经12月30日消息 某信息咨询公司的股东为刘某(持股95%)、张某(持股5%),后公司在多个省...
三部门就《中华人民共和国增值税... 2025年12月25日,国务院总理李强签署第826号国务院令,公布《中华人民共和国增值税法实施条例》...
广发银行汕头分行开展案防形势分... 近日,广发银行汕头分行召开2025年下半年案防工作会议暨案防形势分析会,并同步举办法律知识培训。分行...
“两新”政策优化,为扩内需注入... 备受期待的2026年“国补”来了。 中央经济工作会议明确定调,“坚持内需主导,建设强大国内市场”是2...
2026年“国补”政策来了! 国家发展改革委、财政部印发的《关于2026年实施大规模设备更新和消费品以旧换新政策的通知》30日对外...