首页 > 其他分享 >Ingress简单使用

Ingress简单使用

时间:2024-04-07 15:58:05浏览次数:20  
标签:Ingress name 简单 nginx io 使用 spec IngressClass

介绍

Ingress 是 Kubernetes 中用于公开和管理集群内服务的一种 API 资源。它充当了集群入口的角色,可以将外部流量路由到集群内部的服务,同时提供了一些高级功能,如负载均衡、TLS 终止、虚拟主机路由等。

下面是 Ingress 的一个简单示例,可将所有流量都发送到同一 Service:
请添加图片描述
通过配置,Ingress 可为 Service 提供外部可访问的 URL、对其流量作负载均衡、 终止 SSL/TLS,以及基于名称的虚拟托管等能力

环境准备

必须拥有一个 Ingress 控制器 才能满足 Ingress 的要求。仅创建 Ingress 资源本身没有任何效果。

需要先安装Helm 点击跳转

在安装 Ingress 控制器 点击跳转

Ingress 资源

Ingress 资源示例:

apiVersion: networking.k8s.io/v1
kind: Ingress                                                # 指定了资源的类型为 Ingress
metadata:
  name: web-dashboard                                        # 指定了资源的名称 为 web-dashboard
  annotations:
    kubernetes.io/tls-acme: "true"                           # 启用自动获取 TLS 证书的功能
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"    # 指定后端服务的通信协议为 HTTPS
    nginx.ingress.kubernetes.io/server-snippet: |            # 自定义 Nginx 配置片段,关闭对后端服务证书的验证
      proxy_ssl_verify off;
spec:
  ingressClassName: "nginx"                                  # 指定使用的 Ingress Controller 的类别为 "nginx"
  tls:
    - hosts:
        - web.example.com                                    # 指定 TLS 证书的域名为 "web.example.com"
      secretName: web.example.com                            # 指定存储 TLS 证书的 Secret 的名称为 "web.example.com"
  rules:
    - host: web.example.com
      http:
        paths:
          - path: /
            pathType: Prefix                                 # 指定路径匹配类型为 Prefix,即匹配以 "/" 开头的所有路径
            backend:
              service:
                name: web-dashboard                          # 指定后端 Service服务的名称为 "web-dashboard"
                port:
                  name: https-dashboard                      # 指定后端服务的端口名称为 "https-dashboard",也可以写端口号

查看Ingress

[root@master01 ~]# kubectl get ing
NAME                      CLASS   HOSTS               ADDRESS         PORTS     AGE
web-dashboard             nginx   web.example.com    10.99.220.206    80, 443   20d

Ingress 规则

  • Ingress规则由Ingress资源定义,每个Ingress资源包含一个或多个规则,每个规则指定了一个主机名和与之关联的服务。这些规则可以基于域名、路径或其他条件来匹配请求,并将请求转发到相应的后端服务。
  • 路径列表(例如 /testpath)。每个路径都有一个由 service.name 和 service.port.name 或 service.port.number 确定的关联后端。 主机和路径都必须与入站请求的内容相匹配,负载均衡器才会将流量引导到所引用的 Service,
  • backend(后端)是 Service 文档中所述的 Service 和端口名称的组合, 或者是通过 CRD 方式来实现的自定义资源后端。 对于发往 Ingress 的 HTTP(和 HTTPS)请求,如果与规则中的主机和路径匹配, 则会被发送到所列出的后端。
  • Ingress 经常使用注解(Annotations)来配置一些选项,具体取决于 Ingress 控制器,不同的 Ingress 控制器支持不同的注解。 (查看Ingress 控制器官网

Ingress 配置方法

创建nginx应用和Service

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: proxy
spec:
  containers:
  - name: nginx
    image: nginx:stable
    ports:
      - containerPort: 80
        name: http-web-svc

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app.kubernetes.io/name: proxy
  ports:
  - name: name-of-service-port
    protocol: TCP
    port: 8080
    targetPort: http-web-svc  # 后端 pod 端口的名字 也可以写80端口

nginx 服务起来以后创建Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-nginx
spec:
  ingressClassName: nginx
  rules:
  - host: "foo.nginx.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: nginx-service
            port:
              name: name-of-service-port

在你需要访问的主机上面配置K8S集群的host 通过“foo.nginx.com” 这个域名即可访问nginx服务。

配置多域名Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-wildcard-host
spec:
  rules:
  - host: "foo.bar.com"
    http:
      paths:
      - pathType: Prefix
        path: "/bar"
        backend:
          service:
            name: service1
            port:
              number: 80
  - host: "*.foo.com"
    http:
      paths:
      - pathType: Prefix
        path: "/foo"
        backend:
          service:
            name: service2
            port:
              number: 80

Ingress 类

Ingress 可以由不同的控制器实现,通常使用不同的配置。 每个 Ingress 应当指定一个类,也就是一个对 IngressClass 资源的引用。 IngressClass 资源包含额外的配置,其中包括应当实现该类的控制器名称。

查看Ingress 控制器

kubectl get ingressclasses

yaml 文件

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  annotations:
    meta.helm.sh/release-name: ingress-nginx
    meta.helm.sh/release-namespace: ingress-nginx
  generation: 1
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.8.1
    helm.sh/chart: ingress-nginx-4.7.1
  name: nginx
spec:
  controller: k8s.io/ingress-nginx

IngressClass 中的 .spec.parameters 字段可用于引用其他资源以提供与该 IngressClass 相关的配置。

参数(parameters)的具体类型取决于你在 IngressClass 的 .spec.controller 字段中指定的 Ingress 控制器。

IngressClass 的作用域

集群作用域

IngressClass 参数的默认作用域是集群范围。

如果你设置了 .spec.parameters 字段且未设置 .spec.parameters.scope 字段,或是将 .spec.parameters.scope 字段设为了 Cluster, 那么该 IngressClass 所引用的即是一个集群作用域的资源。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: external-lb-1
spec:
  controller: example.com/ingress-controller
  parameters:									# 包含了与这个 IngressClass 相关的配置参数信息
    scope: Cluster								# 指定了参数资源的作用域为集群级别
    apiGroup: k8s.example.net
    kind: ClusterIngressParameter
    name: external-config-1

命名空间作用域

如果你设置了 .spec.parameters 字段且将 .spec.parameters.scope 字段设为了 Namespace,那么该 IngressClass 将会引用一个名字空间作用域的资源。 .spec.parameters.namespace 必须和此资源所处的名字空间相同。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: external-lb-2
spec:
  controller: example.com/ingress-controller
  parameters:
    scope: Namespace						# 指定了参数资源的作用域为命名空间作用域
    apiGroup: k8s.example.com
    kind: IngressParameter
    namespace: external-configuration		# 指定了具体应用到那个命名空间 这里指定的是“external-configuration”
    name: external-config

默认 Ingress

你可以将一个特定的 IngressClass 标记为集群默认 Ingress 类。 将某个 IngressClass 资源的 ingressclass.kubernetes.io/is-default-class 注解设置为 true 将确保新的未指定 ingressClassName 字段的 Ingress 能够被赋予这一默认 IngressClass。

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  labels:
    app.kubernetes.io/component: controller
  name: nginx-example
  annotations:
    ingressclass.kubernetes.io/is-default-class: "true"  # 设置为默认 IngressClass
spec:
  controller: k8s.io/ingress-nginx

标签:Ingress,name,简单,nginx,io,使用,spec,IngressClass
From: https://blog.csdn.net/qq_39965541/article/details/137271224

相关文章

  • 远程连接与Linux基础使用指南
    1.远程连接与Linux基础使用指南1.远程连接排错详解1.0 Vmware小技巧挂起:把正在运行的虚拟机暂停,这样好处就是虚拟机不用关机。快照:给虚拟机当前状态拍摄一个保存节点,这个保存的节点可以用于恢复。可以在开机,挂起,关机状态拍摄。1.1现象关键提示:Connectionfaile......
  • Pandas基础使用(三)
    apply()函数path=r"C:\work\python\pandas_files\计算列.xlsx"data=pd.read_excel(path)print(data)defhs(a):returnlen(a)b=data['商品名称'].apply(hs)print(b)#使用lambda表达式b=data['商品名称'].apply(lambdaa:len(a))pr......
  • 鸿蒙Native输出so动态库,并提供给第三方导入使用
    前言:DevEcoStudio版本:4.0.0.600API:9最近在学习鸿蒙的Native输出so动态库,下面就给大家分享下我的学习心得及在实现过程中遇到的问题。实现需求:通过so库输出文本内容“你好,鸿蒙!”参考资料:OpenHarmonyNativeAPI实现过程:1、创建Native工程File-->New-->createProject......
  • 密码管理工具KeeWeb使用
    好处统一管理密码自动填充 浏览器google或opera,我使用的opera客户端分为桌面端和web,推荐使用webhttps://app.keeweb.info安装设置汉化选择最后一个使用插件安装,安装中文语言包插件浏览器集成   建立链接后续则可以自动填入密码 ......
  • 使用位运算进行加法运算
    题目大意给你两个整数,求a+b,结果不会超过32位整数,但不能用+、-、*、/等运算符!思路①异或运算=无进位和(a^b)②单独提取进位:(a&b)<<1③无进位和+进位=答案Python,Java,C++等语言中的数字都是以补码形式存储的。但Python没有int,long等不同长度变量,即在编程......
  • 使用miniforge平替anaconda,重建airflow服务
    背景因公司通知不能使用anaconda,可以采用miniforge作为开源平替,因之前环境搭建使用的就是anaconda,当前需要卸载并替换成miniforge。那为什么一定要用这个呢,其实也不是一定,而是用这个搭建环境比较省事,如果没用这个,我当前环境的python版本过低,解决这个问题耗费的时间会更久,所以最......
  • 如何在表单中使用正则表达式校验中文姓名
    在表单中,经常需要对用户输入进行校验以确保数据的准确性和完整性。在某些情况下,我们可能需要使用正则表达式来实现特定的验证规则。本文将介绍如何在表单中使用正则表达式校验中文姓名。正则表达式简介正则表达式是一种强大的模式匹配工具,它可以用来检查一个字符串是否与某种......
  • qt Qml qml Property的使用方法
    9.property简介:自己声明一个变量名,自己赋值,外部可以对其赋值可以声明一个属性变量intstringvardouble等等也可以声明一个控件用于外部写入到本qmlrectanglecomponent等等其他:在property前面可以加readonly就可以只能外部访问,不能修改在property前面可以加req......
  • 教你如何使用Zig实现Cmpp协议
    本文分享自华为云社区《华为云短信服务教你用Zig实现Cmpp协议》,作者:张俭。引言&协议概述中国网络通信集团短信网关协议(CNGP)是中国网通为实现短信业务而制定的一种通信协议,全称叫做ChinaNetcomShortMessageGatewayProtocol,用于在PHS短消息网关(SMGW)和服务提供商(SP)之间、短消......
  • 如何在 Node.js 中使用 bcrypt 对密码进行哈希处理
    在网页开发领域中,安全性至关重要,特别是涉及到用户凭据如密码时。在网页开发中至关重要的一个安全程序是密码哈希处理。密码哈希处理确保明文密码在数据库受到攻击时也难以被攻击者找到。但并非所有的哈希方法都是一样的,这就是bcrypt突出之处所在。Node.js是一个流行的用于开......