三十五、Kubernetes1.25中Ingress使用

news2024/11/17 20:42:04

1、概述

在上篇文章中我们详解销售了Ingress是什么、有什么用以及怎么安装,如果没有看的建议先看下,然后再来看这篇文章,上篇文章地址:https://blog.csdn.net/u011837804/article/details/128564606

这篇文章我们用实际操作,演示怎么使用Ingress。

2、准备Service、Pod

为了后面的实验比较方便,创建如下图所示的模型

安装上述图片模型,我们创建3个Nginx Pod和3个Tomcat Pod,并分配为他们创建servce ,yaml文件名叫tomcat-nginx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: dev
spec:
  replicas: 3
  selector:
    matchLabels:
      app: tomcat-pod
  template:
    metadata:
      labels:
        app: tomcat-pod
    spec:
      containers:
      - name: tomcat
        image: tomcat:8.0
        ports:
        - containerPort: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: tomcat-service
  namespace: dev
spec:
  selector:
    app: tomcat-pod
  clusterIP: None
  type: ClusterIP
  ports:
  - port: 8080
    targetPort: 8080

执行文件并查看创建结果

# 创建
[root@k8s-master ~]# kubectl apply -f tomcat-nginx.yaml
deployment.apps/nginx-deployment created
deployment.apps/tomcat-deployment created
service/nginx-service created
service/tomcat-service created
[root@k8s-master ~]#
# 查看 deploy
[root@k8s-master ~]# kubectl get deploy -n dev
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment    2/3     3            2           7s
tomcat-deployment   3/3     3            3           7s
[root@k8s-master ~]#
# 查看pod
[root@k8s-master ~]# kubectl get pod -n dev
NAME                                 READY   STATUS              RESTARTS   AGE
nginx-deployment-69cbb4f6b6-2nwkd    1/1     Running             0          13s
nginx-deployment-69cbb4f6b6-lsqcp    1/1     Running             0          13s
nginx-deployment-69cbb4f6b6-rmfzc    0/1     ContainerCreating   0          13s
tomcat-deployment-798c966d9d-cg59r   1/1     Running             0          13s
tomcat-deployment-798c966d9d-s5blw   1/1     Running             0          13s
tomcat-deployment-798c966d9d-zrjdf   1/1     Running             0          13s
[root@k8s-master ~]#
# 查看svc
[root@k8s-master ~]# kubectl get svc -n dev
NAME             TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
nginx-service    ClusterIP   None         <none>        80/TCP     17s
tomcat-service   ClusterIP   None         <none>        8080/TCP   17s

3、在本机配置host

更改本机host,模拟两个域名

# 我的master IP 为192.168.8.120 模拟 nginx域名为 nginx.lc.com  
[root@k8s-master ~]# echo "192.168.8.120 nginx.lc.com" >> /etc/hosts
[root@k8s-master ~]#
# 我的master IP 为192.168.8.120 模拟 tomcat域名为 tomcat.lc.com
[root@k8s-master ~]# echo "192.168.8.120 tomcat.lc.com" >> /etc/hosts
[root@k8s-master ~]#
# 查看已添加hosts
[root@k8s-master ~]# cat /etc/hosts
192.168.8.120 nginx.lc.com
192.168.8.120 tomcat.lc.com

4、Http代理

创建ingress-http.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-http
  namespace: dev
spec:
  # 这个很关键,如果写错会导致访问404
  ingressClassName: nginx
  rules:
    - host: nginx.lc.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-service
                port:
                  number: 80
    - host: tomcat.lc.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: tomcat-service
                port:
                  number: 8080

ingressClassName 如果忘记自己设置的是什么,可以通过以下方式查询

命令:

kubectl describe deploy ingress-nginx-controller -n ingress-nginx

实际操作

[root@k8s-master ~]#
# 创建
[root@k8s-master ~]# kubectl apply -f ingress-http.yaml
ingress.networking.k8s.io/ingress-http created
[root@k8s-master ~]#
[root@k8s-master ~]#
# 查看ingress
[root@k8s-master ~]# kubectl get ing ingress-http -n dev
NAME           CLASS     HOSTS                        ADDRESS   PORTS   AGE
ingress-http   nginx   nginx.lc.com,tomcat.lc.com             80      64s
[root@k8s-master ~]#
# 查看ingress详情
[root@k8s-master ~]# kubectl describe ing ingress-http  -n dev
Name:             ingress-http
Labels:           <none>
Namespace:        dev
Address:
Ingress Class:    ingress
Default backend:  <default>
Rules:
  Host           Path  Backends
  ----           ----  --------
  # 可以看出域名  nginx.lc.com 代理了后端 三个nginx pod   访问
  nginx.lc.com
                 /   nginx-service:80 (172.17.169.187:80,172.17.169.190:80,172.17.36.106:80)
  # 可以看出域名  tomcat.lc.com 代理了后端 三个tomcat pod
  tomcat.lc.com
                 /   tomcat-service:8080 (172.17.169.185:8080,172.17.169.188:8080,172.17.36.105:8080)
Annotations:     <none>
Events:          <none>

# 还记得上篇文章中我们 安装完ingree-nginx 后,查看 ingress-nginx-controller service的结果吗
# 在上面我们已经安装完ingress-http 如果想在外部访问则需此处PORTS,这个端口意思是,如果ing代理的是http即80端口,则外部访问需要使用30577(随机生成的,可以自定义)端口访问,如果ing代理的是https即443端口,则外部访问需要使用32667(也是随机生成,当然可以自定义)端口访问
[root@k8s-master ~]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.15.245.169   <none>        80:30577/TCP,443:32667/TCP   41h
ingress-nginx-controller-admission   ClusterIP   10.0.156.229    <none>        443/TCP

# 本次实例我们的tomcat和nginx都是80 端口,所以访问的时候都需要在域名 后面增加 :30577 才可正常访问

本机访问效果

5、Https代理

5.1、创建证书

实际生产我们需要申请https nginx证书,这里我们就模拟创建一个证书

# 创建证书
[root@k8s-master ~]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/C=CN/ST=BJ/L=BJ/O=nginx/CN=lc.com"
Generating a 2048 bit RSA private key
...........+++
..............................+++
writing new private key to 'tls.key'
-----
[root@k8s-master ~]#

# 证书已创建
[root@k8s-master ~]# ls
tls.crt  tls.key

# 创建密钥 这个秘钥创建,如果不会先记着,后续有讲解
[root@k8s-master ~]# kubectl create secret tls tls-secret --key tls.key --cert tls.crt
secret/tls-secret created
[root@k8s-master ~]#

# 查看已创建秘钥
[root@k8s-master ~]# kubectl get secret
NAME         TYPE                DATA   AGE
tls-secret   kubernetes.io/tls   2      6s

5.2、创建ingress-https.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-https
  namespace: dev
spec:
  tls:
    - hosts:
        - nginx.lc.com
        - tomcat.lc.com
      secretName: tls-secret # 指定秘钥
  ingressClassName: ingress-nginx
  rules:
    - host: nginx.lc.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: nginx-service
                port:
                  number: 80
    - host: tomcat.lc.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: tomcat-service
                port:
                  number: 8080

5.3、实例操作效果

# 创建
[root@k8s-master ~]# kubectl apply -f ingress-https.yaml
ingress.networking.k8s.io/ingress-https created
[root@k8s-master ~]#
# 查看ing
[root@k8s-master ~]# kubectl get ing ingress-https -n dev
NAME            CLASS           HOSTS                        ADDRESS   PORTS     AGE
ingress-https   ingress-nginx   nginx.lc.com,tomcat.lc.com             80, 443   7s
[root@k8s-master ~]#
# 查看ing 详情
[root@k8s-master ~]# kubectl describe ing ingress-https -n dev
Name:             ingress-https
Labels:           <none>
Namespace:        dev
Address:
Ingress Class:    ingress-nginx
Default backend:  <default>
# TLS已关联
TLS:
  tls-secret terminates nginx.lc.com,tomcat.lc.com
Rules:
  # 规则也已经创建
  Host           Path  Backends
  ----           ----  --------
  nginx.lc.com
                 /   nginx-service:80 (172.17.169.187:80,172.17.169.190:80,172.17.36.106:80)
  tomcat.lc.com
                 /   tomcat-service:8080 (172.17.169.185:8080,172.17.169.188:8080,172.17.36.105:8080)
Annotations:     <none>
Events:          <none>
[root@k8s-master ~]#

# 查看访问443 需要什么用什么端口  此处是32667
[root@k8s-master ~]# kubectl get svc -n ingress-nginx
NAME                                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             NodePort    10.15.245.169   <none>        80:30577/TCP,443:32667/TCP   41h
ingress-nginx-controller-admission   ClusterIP   10.0.156.229    <none>        443/TCP

# 在本地访问 https://tomcat.lc.com:32667  和 https://nginx.lc.com:32667  查看效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/186079.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vs鼠标右键“管理NuGet程序包”无响应

其他C#开发问题参考我的&#xff1a;C#基础知识体系框架图&#xff0c;及起对应我发过的博客 问题&#xff1a;下载SharpDX的开源示例代码&#xff0c;鼠标右键无法正常打开NuGet下载依赖&#xff0c;而在本地自己创建的项目中可以正常下载 原因&#xff1a;缺少.sln文件 解决…

定时任务Demo总结(推荐最后一种)

方法一&#xff1a; 线程实现 Runnable 接口 Thread thread new Thread(new Runnable() {Overridepublic void run() {while (true) {SimpleDateFormat sdf new SimpleDateFormat("HH:mm:ss.SSS");String dateStr sdf.format(new Date());System.out.println(&quo…

1.【SpringBoot源码】如何搭建SpringBoot源码调试环境?

目录 一、环境安装要求 二、从github上将SpringBoot源码项目下载下来 三、将SpringBoot源码项目导入到IDEA中 四、编译构建SpringBoot源码项目 五、运行SpringBoot自带的sample 一、环境安装要求 IntelliJ IDEAJDK1.8Maven3.5以上 二、从github上将SpringBoot源码项目下载…

嵌入式开发者的选择——用RTOS,还是不用RTOS?

多年来&#xff0c;随着新技术的引入以及用户和应用程序的不同需求&#xff0c;嵌入式开发人员发生了变化。正如所有嵌入式东西一样&#xff0c;没有两次流程是相同的。然而&#xff0c;我们应对设计挑战的方式有一些共同之处。你总是从系统级别开始&#xff0c;需要从最终应用…

深入 ServiceWorker,消息推送,后台同步,一网打尽

上一章讲到了ServiceWorker的基础使用&#xff0c;但是它的功能不仅仅只有这些&#xff0c;还有很多很多&#xff0c;比如消息推送&#xff0c;后台同步&#xff0c;甚至还有WebRTC&#xff0c;这一章我们来进阶ServiceWorker。 前期准备 在开始之前&#xff0c;我们先做一下…

【分布式微服务】SpringBoot启动原理

一、SpringBoot启动类 SpringBootApplication(exclude DataSourceAutoConfiguration.class) public class PracticeApplication {public static void main(String[] args) {SpringApplication.run(PracticeApplication.class, args);} }二、源码解析 /*** Static helper that …

云原生安全方案介绍

方案介绍 安全狗云原生应用安全解决方案(CNAPP, Cloud-Native Application Protection Platform)采用主机安全Agent和安全容器相结合的技术&#xff0c;既落地了“安全左移”的概念&#xff0c;又能对云原生容器做全面保护&#xff0c;同时能灵活地跟容器编排体系相结合&#x…

map find/count源码分析

参考博客&#xff1a;c map find方法源码解析 众所周知&#xff0c;如果一个数据结构想作为map的key&#xff0c;则必须重载 operator < 否则编译将会报错。但是operator 则是不需要的。那么当查找某个key是否存在的时候&#xff0c;map内部是怎么实现的呢&#xff1f; 结…

1301738-40-8,Bis-maleimides-amine,双马来酰亚胺-氨基

一、基础产品数据&#xff08;Basic Product Data&#xff09;&#xff1a;CAS号&#xff1a;1301738-40-8中文名&#xff1a;三臂双马来酰亚胺-氨基&#xff0c;双马来酰亚胺-氨基&#xff0c;活性交联剂&#xff0c;异官能团三臂交联剂英文名&#xff1a;Bis-Maleimides amin…

【C语言进阶】柔性数组

目录一&#xff1a;柔性数组的特点二&#xff1a;柔性数组的使用三&#xff1a;模拟实现柔性数组在C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做柔性数组成员 以下是柔性数组的两种写法&#xff1a; //写法一&#xff1a; struct S {int n…

Python笔记 · 鸭子类型 / Duck Typing

1. 问题的由来 我初次意识到鸭子类型在存在是在学习Sklearn时&#xff0c;在《Hands-On Machine Learing》一书的第二章&#xff0c;作者提供了一个自定义的Tansformer&#xff0c;使用自定义Transformer的好处在于&#xff1a;你既可以实现自己需要的数据处理逻辑&#xff0c…

【应用】SpringCloud -- Gateway

SpringCloud -- GatewayGateway 网关概述Gateway 的功能Gateway 核心概念Gateway 网关搭建Gateway 的配置及使用predicate 断言filter 过滤器GlobalFilter 全局过滤器Gateway 的几点问题过滤器执行顺序跨域问题Gateway 网关概述 Gateway 的功能 在微服务当中&#xff0c;有很…

PG15 pg_basebackup 代码解析

背景 先前 PG 版本 pg_basebackup 的代码较为复杂&#xff0c;pg_basebackup 在备份过程中做了很多事情&#xff0c;但这部分代码逻辑没有完全解耦&#xff0c;导致一个文件里包含了很多功能的逻辑&#xff0c;影响了代码的可读性和可修改性。 因此&#xff0c;PG 15 针对这部…

模电学习3. 差模、共模干扰与安规电容

模电学习3. 差模、共模干扰与安规电容一、简介1. 安规2. 电源安规标准二、差模干扰与共模干扰1. 共模干扰2. 差模干扰&#xff08;1&#xff09;定义&#xff08;2&#xff09;来源与特性3. 测量4. 消除电源线路中的差模干扰&#xff08;1&#xff09;差模电容5. 消除电源线路中…

TOOM加强网络舆情监控制定处置预案,抓好舆情监控管理?

舆情预案是指根据对未来舆情发展趋势的预测&#xff0c;制定预先准备的舆情处置方案&#xff0c;以应对可能出现的舆情危机。舆情预案包括舆情预警体系、舆情应对策略、应对措施等内容&#xff0c;旨在在舆情危机发生前进行有效的预防和准备&#xff0c;避免舆情危机扩大&#…

95. BERT预训练数据代码

为了预训练之前实现的BERT模型&#xff0c;我们需要以理想的格式生成数据集&#xff0c;以便于两个预训练任务&#xff1a;遮蔽语言模型和下一句预测。一方面&#xff0c;最初的BERT模型是在两个庞大的图书语料库和英语维基百科的合集上预训练的&#xff0c;但它很难吸引这本书…

Zookeeper 教程

Zookeeper 教程Zookeeper 概述分布式应用Zookeeper 架构图ZooKeeper当中的主从与主备&#xff1a;Zookeeper的特性分布式应用的优点分布式应用的挑战什么是Apache ZooKeeper&#xff1f;ZooKeeper的好处Zookeeper 基础ZooKeeper的架构层次命名空间Znode的类型Sessions&#xff…

九龙证券|外资放大招,400亿巨头狂飙!这只翻倍股却突然崩了

昨日超级“开门红”之后&#xff0c;今天上午港股又有多只重磅个股大幅涨超10%。 今日上午&#xff0c;港股整体窄幅震荡&#xff0c;上午收盘&#xff0c;恒生指数微跌0.05%&#xff0c;恒生科技指数涨0.22%。 职业板块方面&#xff0c;媒体、软件服务、电信等涨幅居前&#…

【BLE】ANCS(Apple Notification Center Service)

目录1. 前言1.1 名词解释1.2 ANCS概述2. ANCS的特征2.1 通知源2.2 控制点和数据源2.3 获取通知属性2.4 获取应用属性2.5 执行通知操作2.6 通知操作3. 更多详情参考1. 前言 1.1 名词解释 NP(Notification Provider)&#xff1a;消息提供者&#xff0c;指的是ANCS服务的生产者&…

【JavaSE】入门概述(1~41)

1.Java视频及配套资料下载指南 2.Java基础学习导读 Java语言的三个层面 基本语法&#xff1a;变量、运算符、流程控制、数组面向对象&#xff1a;把数据及对数据的操作方法放在一起&#xff0c;作为一个相互依存的整体——对象高级应用&#xff1a;多线程、集合、IO流、网络…