k8s—ingress应用

news2025/1/10 23:28:23

一、ingress和ingress-controller

ingress对象: 指的是k8s中的⼀个api对象/资源对象,⼀般⽤yaml配置。作⽤是定义请求如何转发到service的规则,可以理解为配置模板。
ingress-controller: 具体实现反向代理及负载均衡的程序,对ingress定义的规则进⾏解析,根据配置的规则来实现请求转发;
        简单来说,ingress-controller才是负责具体转发的组件,通过各种⽅式将它暴露在集群⼊⼝,外部对集群的请求流量会先到ingress-controller,⽽ingress对象是⽤来告诉ingress-controller该如何转发请求,⽐如哪些域名哪些path要转发到哪些服务等等;
         对于不同的URL地址经常对应 ⽤不同的后端服务或者虚拟服务器,这些应⽤层的转发机制仅通过kubernetes的service机制是⽆法实 现的,这种情况我们可以使⽤ingress策略定义和⼀个具体的ingress Controller. Ingress提供七层负载 均衡能⼒,可以通过 Ingress 配置提供外部可访问的 URL、负载均衡、SSL、基于名称的虚拟主机等。 作为集群流量接⼊层,Ingress 的⾼可靠性显得尤为重要;
         这个负载均衡是基于nginx七层反向代理来实现的,ingress⼯作原理如下图:

2)Ingress ⼀般由三个组件组成:
         Nginx 反向代理负载均衡器
         Ingress Controller 可以理解为控制器,它通过不断的跟 Kubernetes API 交互,实时获取后端Service、Pod 等的变化,⽐如新增、删除等,然后结合 Ingress 定义的规则⽣成配置,然后动态更新上边的 Nginx 负载均衡器,并刷新使配置⽣效,来达到服务⾃动发现的作⽤。
        Ingress 则是定义规则,通过它定义某个域名的请求过来之后转发到集群中指定的 Service。它可以通过 Yaml ⽂件定义,可以给⼀个或多个 Service 定义⼀个或多个 Ingress 规则

二、部署Ingress控制器(nginx)

1.下载ingress controller
wget https://github.com/kubernetes/ingress-nginx/archive/nginx-0.30.0.tar.gz
2.解压到/mnt目录下

tar xzvf  nginx-0.30.0.tar.gz -C /mnt

3.修改配置文件

[root@k8s-master static]# pwd
/mnt/nginx-0.30.0/deploy/static
[root@k8s-master static]# ls
configmap.yaml  mandatory.yaml  namespace.yaml  provider  rbac.yaml  with-rbac.yaml
[root@k8s-master static]# vim mandatory.yaml

        #找到已下apiserver 的版本;大概在190行左右
apiVersion: apps/v1
kind: DaemonSet                  # 将原来的 Deployment 修改为 DaemonSet
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
#replicas: 1         #将这⾥注释
selector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
template:
metadata:
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
annotations:
prometheus.io/port: "10254"
prometheus.io/scrape: "true"
spec:
# wait up to five minutes for the drain of connections
terminationGracePeriodSeconds: 300
serviceAccountName: nginx-ingress-serviceaccount
hostNetwork: true                  #添加此配置,共享宿主机⽹络,将下面两行注释掉
# nodeSelector:
# custom/ingress-controller-ready: "true" # 添加此配置
containers:
- name: nginx-ingress-controller
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
                 # 提前将镜像拉下来
args:
- /nginx-ingress-controller
4、应用并创建ingress

[root@k8s-master static]# kubectl apply -f mandatory.yaml 
namespace/ingress-nginx created
configmap/nginx-configuration created
configmap/tcp-services created
configmap/udp-services created
serviceaccount/nginx-ingress-serviceaccount created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRole is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRole
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
Warning: rbac.authorization.k8s.io/v1beta1 Role is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 Role
role.rbac.authorization.k8s.io/nginx-ingress-role created
Warning: rbac.authorization.k8s.io/v1beta1 RoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 RoleBinding
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
Warning: rbac.authorization.k8s.io/v1beta1 ClusterRoleBinding is deprecated in v1.17+, unavailable in v1.22+; use rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
daemonset.apps/nginx-ingress-controller created
limitrange/ingress-nginx created

5.测试ingress
[root@k8s-master ingress]# vim my-apache.yaml
[root@k8s-master ingress]# cat my-apache.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-apache
spec:
  selector:
    matchLabels:
      run: my-apache
  replicas: 2
  template:
    metadata:
      labels:
        run: my-apache
    spec:
      containers:
      - name: my-apache
        image: daocloud.io/library/httpd:2.4
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-apache
  labels:
    run: my-apache
spec:
  #type: NodePort
  ports:
  - port: 80
    targetPort: 80
    #nodePort: 30002
  selector:
    run: my-apache

[root@k8s-master ingress]# vim my-nginx.yaml
[root@k8s-master ingress]# cat my-nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      run: my-nginx
  replicas: 2
  template:
    metadata:
      labels:
        run: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: daocloud.io/library/nginx:1.7.9
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-nginx
  labels:
    run: my-nginx
spec:
  #type: NodePort
  ports:
  - port: 80
    targetPort: 80
    #nodePort: 30001
  selector:
    run: my-nginx

[root@k8s-master ingress]# kubectl apply -f my-apache.yaml 
deployment.apps/my-apache created
service/my-apache created
[root@k8s-master ingress]# kubectl apply -f my-nginx.yaml 
deployment.apps/my-nginx created
service/my-nginx created
[root@k8s-master ingress]# kubectl get svc
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes             ClusterIP   10.96.0.1       <none>        443/TCP    2d
my-apache              ClusterIP   10.96.232.20    <none>        80/TCP     22s
my-nginx               ClusterIP   10.109.72.52    <none>        80/TCP     13s
redis-access-service   ClusterIP   10.103.21.164   <none>        6379/TCP   5h50m
redis-service          ClusterIP   None            <none>        6379/TCP   7h33m
[root@k8s-master ingress]# kubectl get pod
NAME                                                READY   STATUS      RESTARTS   AGE
my-apache-7c88db656c-6s7zd                          1/1     Running     0          31s
my-apache-7c88db656c-xvmg8                          1/1     Running     0          31s
my-nginx-5fdc96f9b4-dmsm7                           1/1     Running     0          22s
my-nginx-5fdc96f9b4-pl2w4                           1/1     Running     0          22s
6.配置ingress转发文件
1)宿主机网络模式:hostNetwork
[root@k8s-master ingress]# vim ingress-test.yaml
[root@k8s-master ingress]# cat ingress-test.yaml 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
  namespace: default
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: www.ingress.com
    http:
      paths:
      - path: /
        pathType: Prefix 
        backend: 
          service: 
            name: my-apache
            port:
              number: 80
[root@k8s-master ingress]# kubectl apply -f ingress-test.yaml 
ingress.networking.k8s.io/test-ingress created
[root@k8s-master ingress]# kubectl get ingress
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
NAME           CLASS    HOSTS             ADDRESS   PORTS   AGE
test-ingress   <none>   www.ingress.com             80      21s
[root@k8s-master ingress]# vim /etc/hosts
 # 添加www.ingress.com的域名解析
192.168.22.135 k8s-node1 www.ingress.com
192.168.22.136 k8s-node2 www.ingress.com
[root@k8s-master ingress]# curl www.ingress.com
<html><body><h1>It works!</h1></body></html>
2)nodePort方式

将上述mandatory.yaml文件修改一下,

        #找到已下apiserver的版本;大概在190行左右
apiVersion: apps/v1
kind: Deployment                 #将原来的DaemonSet修改为Deployment
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
replicas: 2         #将这⾥注释取消掉
selector:
matchLabels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
template:
metadata:
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
annotations:
prometheus.io/port: "10254"
prometheus.io/scrape: "true"
spec:
# wait up to five minutes for the drain of connections
terminationGracePeriodSeconds: 300
serviceAccountName: nginx-ingress-serviceaccount
#hostNetwork: true         ​​​​​​​        #这一行注释掉,将下面两行注释掉
# nodeSelector:
# custom/ingress-controller-ready: "true"
containers:
- name: nginx-ingress-controller
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0
                #提前将镜像拉下来
args:
- /nginx-ingress-controller

将my-apache.yaml和my-nginx.yaml文件中的type:NodePort这一行的注释取消掉,应用就可以了;

[root@k8s-master ingress]# cat my-apache.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-apache
spec:
  selector:
    matchLabels:
      run: my-apache
  replicas: 2
  template:
    metadata:
      labels:
        run: my-apache
    spec:
      containers:
      - name: my-apache
        image: daocloud.io/library/httpd:2.4
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: my-apache
  labels:
    run: my-apache
spec:
  type: NodePort        #将这一行注释取消掉
  ports:
  - port: 80
    targetPort: 80
    #nodePort: 30002        #这一行注释不取消掉则会随机指定一个端口号
  selector:
    run: my-apache

然后应用即可;

[root@k8s-master nodeport]# kubectl apply -f mandatory.yaml
[root@k8s-master nodeport]# kubectl apply -f my-apache.yml
[root@k8s-master nodeport]# kubectl apply -f my-nginx.yml
[root@k8s-master nodeport]# kubectl apply -f ingress-test.yaml

查看并测试

[root@k8s-master ingress]# kubectl get svc
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes             ClusterIP   10.96.0.1       <none>        443/TCP        2d1h
my-apache              NodePort    10.104.49.58    <none>        80:30002/TCP   72s
my-nginx               NodePort    10.110.73.158   <none>        80:30001/TCP   66s
redis-access-service   ClusterIP   10.103.21.164   <none>        6379/TCP       6h59m
redis-service          ClusterIP   None            <none>        6379/TCP       8h

打开浏览器访问,如果访问不到记得做域名解析;win+r打开运行窗口,输入drivers,打开etc文件中的hosts文件,写入域名解析即可;

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

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

相关文章

IO-Link通信笔记(十七)——可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈与接口代码生成和监控上位机与便携式通信主站

一、可任意MCU平台移植的面向对象程序设计的IO-Link从站协议栈 图形化界面与驱动代码库生成功能&#xff0c;是现如今几大半导体芯片供应商选择向广大开发人员推荐的主流开发方式&#xff0c;例如意法的cube-mx。开发人员可以通过这些软件针对所使用芯片的相关外设资源&#xf…

缺失值处理方法:代数/统计/机器学习算法补全数据(附Python-sklearn代码精美可视化绘图)

注&#xff1a;本期的删除或插补方法主要针对连续数据&#xff0c;时间序列数据的插补在后续关于时间序列的博客中讲明。参考鸢尾花丛书&#xff0c;链接如下&#xff1a; 参考书籍及源代码链接https://github.com/Visualize-ML 博客是选出自己感觉用的到的精炼部分加自己的理…

春秋云境 | 文件上传 | CVE-2022-30887

目录 靶标介绍 开启靶场 上传一句话木马 蚁剑连接 找到 flag 靶标介绍 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口&#xff0c;客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库&#xff0…

eclipse无法使用jdk1.6编译老项目

主要修改两个地方的配置&#xff1a; 1、eclipse中配置的maven版本不能过高&#xff0c;亲测3.2.5版本是好使的。 2、修改eclipse安装目录下的eclipse.ini文件&#xff0c;将其中的-Dosgi.requiredJavaVersion更改为1.6即可&#xff0c;我得默认是1.7 最后附上maven安装包&…

AGV一体式ARM智能控制主机如何替代传统PLC、工控机等方案

工业自动化的不断发展&#xff0c;AGV&#xff08;自动导引车&#xff09;作为一种重要的物流搬运设备&#xff0c;在各个领域得到了广泛的应用。而 AGV 的控制主机是其核心部件之一&#xff0c;直接影响着 AGV 的性能和稳定性。传统的 AGV 控制主机通常采用 x86 工控机交换机i…

【密码学】密码协议的分类:②认证协议

密码协议的分类有很多种方式&#xff0c;这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类&#xff1a;认证协议、密钥建立协议、认证密钥建立协议。 一、认证协议是什么&#xff1f; 认证协议都在认证些什么东西呢&#xff1f;认证一般要认证三个东西&#x…

防止老年痴呆的小学题

直角三角形的周长为16,斜边长为7,求三角形的面积(不使用勾股定理) 答案为(9*9-7*7)/4

aria2下载器在windows端的使用

一、下载aria2 aria2aria2 is a lightweight multi-protocol & multi-source command-linedownload utility. It supports HTTP/HTTPS, FTP, SFTP,BitTorrent and Metalink. …https://aria2.github.io/打开链接&#xff0c;点击要下载的版本&#xff0c;注意windows版本跟…

k8s持久化存储PV和PVC

一、PV和PVC 1.PersistentVolume (PV) PersistentVolume (PV) 是外部存储系统中的⼀块存储空间&#xff0c;由管理员创建和维护。与 Volume⼀样&#xff0c; PV 具有持久性&#xff0c;⽣命周期独⽴于 Pod&#xff1b; 2.PersistentVolumeClaim (PVC) PersistentVolumeClaim…

MySQL的三大关键日志:Bin Log、Redo Log与Undo Log

MySQL的三大关键日志&#xff1a;Bin Log、Redo Log与Undo Log 1. Bin Log&#xff08;二进制日志&#xff09;2. Redo Log&#xff08;重做日志&#xff09;3. Undo Log&#xff08;回滚日志&#xff09; ) &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷…

8.6 Day14 匿名用户访问ftp位置

vsftpd的端口号&#xff1a;tcp 20、21 vsftpd的配置文件&#xff1a;/etc/vsftpd/vsftpd.conf LInux系统防火墙默认不允许开启20、21端口访问 使用不同用户访问FTP 1.使用匿名用户访问FTP 匿名用户登录时&#xff0c;用户名为ftp&#xff0c;没有密码 测试匿名用户文件上传…

20240806---特征选择与稀疏学习笔记---pptp61-p92---奇异值分解/压缩感知、字典学习

一.奇异值分解 2.要进行特征分解&#xff0c;则矩阵A为方阵&#xff0c;如果矩阵 &#x1d434;A 不是方阵&#xff08;即行数和列数不同&#xff09;&#xff0c;我们仍然可以对其进行分解&#xff0c;这就是奇异值分解&#xff08;SVD&#xff09;的强大之处。 二.压缩感知 …

力扣面试经典算法150题:移除元素

移除元素 今日的题目依旧是力扣面试经典算法150题中数组相关的题目&#xff1a;移除元素 题目链接&#xff1a;https://leetcode.cn/problems/remove-element/description/?envTypestudy-plan-v2&envIdtop-interview-150 题目描述 给定一个排序数组 nums 和一个值 val&a…

cpu问题排查——mpstat

mpstat是sysstat包中用于linux下排查、监控cpu的一个工具。可从该工具体现出程序中断情况、cpu负载情况等。 用法 mpstat [ options ] [ <interval> [ <count> ] ] 命令参数 -P { <cpu_list> | ALL } : ALL表示所有cpu的平均损耗信息&#xff0c;<cpu_…

PXE 服务器搭建——启动界面设计实验

环境准备&#xff1a; 前期准备&#xff1a; 解决 kickstart 实验出现的 DHCP 的问题-CSDN博客 http://t.csdnimg.cn/5vZP0 当前准备&#xff1a; 两台虚拟机&#xff1a;RHEL7 OpenEuler(作为测试机器使用) ip&#xff1a;172.25.254.100 yum install syslinux.x…

Go语言标准库中的双向链表的基本用法

什么是二分查找区间&#xff1f; 什么是链表&#xff1f; 链表节点的代码实现&#xff1a; 链表的遍历&#xff1a; 链表如何插入元素&#xff1f; go语言标准库的链表&#xff1a; 练习代码&#xff1a; package mainimport ("container/list""fm…

如何在Python中诊断和解决内存溢出问题

python的内存溢出即程序在申请内存后未能正确释放&#xff0c;导致随着时间推移占用的内存越来越多&#xff0c;以下是一些可能导致内存溢出的原因&#xff1a; 1、循环引用&#xff1a;当对象之间形成循环引用&#xff0c;并且这些对象定义了__del__方法时&#xff0c;Python…

证券行业容器云平台建设之GPU池化建议

随着分布式微服务化技术的广泛使用&#xff0c;用户对于容器系统的需求急剧增加。证券行业在近几年开始着手引入企业级容器云平台。在AIGC的大环境下&#xff0c;证券行业正以数据中台、智能中台为核心&#xff0c;在营销、投顾、投研、风控等多个领域进行智能化升级&#xff0…

MYSQL主库切换binlog模式后主从同步错误

MYSQL主库切换binlog模式后主从库同步错误的问题 在使用FlinkSQL的mysql-cdc连接器来监听MySQL数据库时&#xff0c;通常需要将MySQL的binlog模式设置为ROW模式。然而&#xff0c;在实际项目中&#xff0c;可能会遇到如下问题&#xff1a; 当我们将MySQL主库的binlog模式从STA…

计算机网络408考研 2018

1 计算机网络408考研2018年真题解析_哔哩哔哩_bilibili