当前位置: 首页 > news >正文

kubernetes — 安装Ingress

1、 Ingress

 1、安装-Nginx-Ingress

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.1/deploy/static/provider/cloud/deploy.yaml

 2、设为默认的Ingress

[root@k8s01 ~]# vim default_ingress.yaml 
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:labels:app.kubernetes.io/component: controllername: nginxannotations:ingressclass.kubernetes.io/is-default-class: "true"
spec:controller: k8s.io/ingress-nginx[root@k8s01 ~]# k apply -f default_ingress.yaml

 3、创建deployment(命令方式)

k create deployment webserver1 --image=httpd

4、创建service并暴露端口

k expose deployment webserver1 --port=8080 --target-port=80

5、发布单个服务

[root@k8s01 ~]# vim ingress1.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: test-ingress
spec:defaultBackend:service:name: webserver1port:number: 8080[root@k8s01 ~]# k apply -f ingress1.yaml

2、基于名称的虚拟托管

1、Ingress 资源在 rules 中定义的 hosts

机支持将针对多个主机名的 HTTP 流量路由到同一 IP 地址上

1.创建第二个deployment

[root@k8s01 ~]# k create deployment webserver2 --image=httpd

2.创建第二个service并暴露端口

因为是不同的ClusterIP,所以端口可以为同一个

[root@k8s01 ~]# k expose deployment webserver3 --port=8082 --target-port=80

3.创建基于路径的虚拟托管的ingress

[root@k8s01 ~]# k get svc
NAME          TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
webserver1    ClusterIP   10.104.70.168    <none>        8080/TCP    21m
webserver2    ClusterIP   10.110.102.43    <none>        8081/TCP    4s
[root@k8s01 ~]# vim ingress_name.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: name-virtual-host-ingress
spec:rules:- host: foo.bar.comhttp:paths:- pathType: Prefixpath: "/"backend:service:name: webserver1port:number: 8080- host: bar.foo.comhttp:paths:- pathType: Prefixpath: "/"backend:service:name: webserver2port:number: 8081[root@k8s01 ~]# k apply -f ingress_name.yaml
ingress.networking.k8s.io/name-virtual-host-ingress created

        当定义了Ingress规则,并将其与特定的主机名关联时(例如,host: www.cce-test.com),请求将只会被路由到与该主机名匹配的后端服务。这意味着只有通过www.cce-test.com主机名发送的请求才会被路由,而不会使用节点的IP地址 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: webnamespace: defaultannotations:kubernetes.io/ingress.class: "nginx"
spec:rules:- host: www.cce-test.comhttp:paths:- backend:service:name: nginx-proxyport:number: 30002path: /pathType: Prefix- http:paths:- backend:service:name: nginx-proxyport:number: 30002path: /pathType: Prefix
这个示例,可以同时支持域名和NodeIP方式访问

 4.修改hosts文件

[root@k8s01 ~]# echo "192.168.248.21 foo.bar.com bar.foo.com" >> /etc/hosts

5.测试

[root@k8s01 ~]# curl bar.foo.com
web2
[root@k8s01 ~]# curl foo.bar.com
web1

2、Ingress 资源没有在 rules 中定义的任何 hosts

1.创建第三个deployment

[root@k8s01 ~]# k create deployment webserver3 --image=httpd

2.创建第三个service并暴露端口

[root@k8s01 ~]# k expose deployment webserver2 --port=8081 --target-port=80

3.创建基于路径的虚拟托管的ingress,并且增加没有在rule中定义的hosts

[root@k8s01 ~]# vim ingress_name_norule.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: name-virtual-host-ingress-no-third-host
spec:rules:- host: foo.bar.comhttp:paths:- pathType: Prefixpath: "/"backend:service:name: webserver1port:number: 8081- host: bar.foo.comhttp:paths:- pathType: Prefixpath: "/"backend:service:name: webserver2port:number: 8082- http:paths:- pathType: Prefixpath: "/"backend:service:name: webserver3port:number: 8083

4.

        如果在Ingress中没有指定默认后端(如 webserver3),那么未匹配到任何主机名的请求仍然会被允许通过。这是Ingress的默认规则。

        在Ingress配置中,只有foo.bar.combar.foo.com 的请求会被路由到相应的后端服务(webserver1webserver2)。对于其他主机名或没有指定主机名的请求,它们会被Ingress Controller视为未匹配到任何规则的请求,因此会被放行。这就是为什么即使不加 webserver3,未匹配到任何主机名的请求也会被允许通过的原因

3、基于路径的虚拟托管

1.编写Ingress的yaml

[root@k8s01 ~]# vim ingress_name_ip.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-ip-pathannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- http:paths:- pathType: Prefixpath: "/web1"backend:service:name: webserver1port:number: 8080- pathType: Prefixpath: "/web2"backend:service:name: webserver2port:number: 8081[root@k8s01 ~]# k apply -f ingress_name_ip.yaml

Ingress 经常使用注解(annotations)来配置一些选项,具体取决于 Ingress 控制器,例如重写目标注解

  annotations:
    kubernetes.io/ingress.class: "nginx" 

  • kubernetes.io/ingress.class:这是一个内置的Kubernetes注解,用于标识Ingress资源所使用的Ingress控制器的类别或名称。

  • "nginx":这个值表示该Ingress资源应该由名称为 "nginx" 的Ingress控制器处理

NameDescriptionValues
nginx.ingress.kubernetes.io/rewrite-targetTarget URI where the traffic must be redirectedstring
nginx.ingress.kubernetes.io/ssl-redirectIndicates if the location section is only accessible via SSL (defaults to True when Ingress contains a Certificate)bool
nginx.ingress.kubernetes.io/force-ssl-redirectForces the redirection to HTTPS even if the Ingress is not TLS Enabledbool
nginx.ingress.kubernetes.io/app-rootDefines the Application Root that the Controller must redirect if it's in / contextstring
nginx.ingress.kubernetes.io/use-regexIndicates if the paths defined on an Ingress use regular expressionsbool

2.测试

[root@k8s01 ~]# curl 192.168.248.21/web1
web1
[root@k8s01 ~]# curl 192.168.248.21/web2
web2

http://www.lryc.cn/news/132964.html

相关文章:

  • SSR使用HTTPS
  • Spring Boot中使用validator如何实现接口入参自动检验
  • thinkphp 5 实现UNION ALL 3个联表查询,并且带上搜索条件,名称,时间,手机号
  • React 之 Router - 路由详解
  • 框架分析(1)-IT人必须会
  • 前端面试的游览器部分(7)每天10个小知识点
  • 认识Junit
  • Unity C# 引用池 ReferencePool
  • opencv 进阶10-人脸识别原理说明及示例-cv2.CascadeClassifier.detectMultiScale()
  • 〔013〕Stable Diffusion 之 图片自动评分和不健康内容过滤器 篇
  • 6.RocketMQ之消费索引文件ConsumeQueue
  • Appium-移动端自动测试框架,如何入门?
  • 复数混频器、零中频架构和高级算法开发
  • Web 拦截器-interceptor
  • Java进阶(4)——结合类加载JVM的过程理解创建对象的几种方式:new,反射Class,克隆clone(拷贝),序列化反序列化
  • 扩散模型实战(四):从零构建扩散模型
  • YOLOv5、YOLOv8改进:S2注意力机制
  • LeetCode 542. 01 Matrix【多源BFS】中等
  • 使用open cv进行角度测量
  • java 线程池实现多线程处理list数据
  • Centos安装Docker
  • Unity启动项目无反应的解决
  • 2.3 opensbi: riscv: opensbi源码解析
  • 点破ResNet残差网络的精髓
  • Ubuntu服务器service版本初始化
  • re学习(33)攻防世界-secret-galaxy-300(脑洞题)
  • Mybatis Plus中使用LambdaQueryWrapper进行分页以及模糊查询对比传统XML方式进行分页
  • vue中push和resolve的区别
  • 详解RFC 3550文档-1
  • Go 与 Rust