首页 > 其他分享 >k8s之ingress

k8s之ingress

时间:2024-09-12 09:26:31浏览次数:11  
标签:ingress Service Ingress 流量 Controller API k8s

Service & Ingress

Service

  • 基于iptables或ipvs实现的四层负载均衡机制
  • 不支持基于URL等机制对HTTP/HTIPS协议进行高级路由、超时/重试、基于流量的灰度等高级流量治理机制
  • 难以将多个Seryice流量统一管理

Ingress

  • 由Ingress API和Ingress Controller共同组成

  • 前者负责以k8s标准的资源格式定义流量调度、路由等规则

  • 后者负责监视(watch)Ingress并生成自身的配置,并据此完成流量转发。

  • Ingress Controller非为内置的控制器,需要额外部署

  • 通常以Pod形式运行于Kubernetes集群之上

  • 一般应该由专用的LB Service负责为其接入集群外部流量

Ingress API

将Kubernetes集群内部运行的某服务(Service)通过七层负载均衡的机制开放到集群外部。Ingress API是Kubernetes一种声明式配置接口。

Ingress Controller

Ingress Controller 是实现Ingress API的实体。

通常将能够通过API Server读取ingress的定义,并能够将其自动转换成当前应用程序的配置,而且支持自动热重载,它就能够成为支撑Ingress API的Ingress Controller。

  • 读取 Ingress 定义:Ingress Controller 需要能够监听 Kubernetes API Server,以获取 Ingress 资源的定义。这包括对 Ingress 资源的增加、删除和修改的监听。
  • 自动转换配置:Ingress Controller 根据读取到的 Ingress 定义,自动转换并更新其内部的配置。这个配置决定了如何将外部流量路由到集群内的服务。
  • 支持自动热重载:当 Ingress 资源发生变化时,Ingress Controller 应该能够无需重启服务的情况下,动态地更新其路由规则。这种能力通常称为“热重载”,意味着流量不会因配置更新而中断。
  • 实现 Ingress API:Ingress Controller 需要实现 Kubernetes Ingress API 的规范,确保它能够支持定义的路由规则、SSL 终端、重写规则等。
  • 网络和负载均衡:Ingress Controller 通常还需要与网络组件交互,如服务发现、负载均衡器配置等,以确保流量正确地分发到后端服务。
  • 高可用性和容错性:在生产环境中,Ingress Controller 应该具备高可用性和容错性,以确保流量管理的稳定性。
  • 安全性:Ingress Controller 管理着进入集群的流量,因此需要考虑安全性,包括 SSL/TLS 证书管理、访问控制等。

Ingress创建

LoadBalancer + Ingress Nginx

1、部署 LoadBalancer

创建一个 LoadBalancer 类型的 Service 来为 Ingress 控制器提供外部访问点。云服务提供商会为您的 LoadBalancer 分配一个外部 IP 地址,该地址将流量路由到 Ingress 控制器。
通过MetalLB 也可以实现 Kubernetes 集群的负载均衡。

2、部署 Ingress 控制器

部署一个 Ingress 控制器,如 nginx-ingress、traefik 或 haproxy-ingress。这些控制器会监视 Ingress 资源,并根据定义的规则配置其内部的负载均衡器和反向代理。

  • 外部流量策略设置

使用Nodeport类型的service时,不确定流量从哪个节点进入需要修改外部流量策略为Cluster。
externalTrafficPolicy : Local (Local只负责将从哪个节点进来的流量只调度给率属于该Service的Pod)
externalTrafficPolicy : Cluster

3、创建工作负载以及Service

4、定义 Ingress 资源

创建 Ingress 资源来定义如何将外部流量路由到集群内的服务。这些资源指定了域名、URL 路径和后端服务之间的映射。
Ingress需要通过Ingressclass指定所属的Ingress Controller。

对于每个ingress资源的定义,都会被ingress 控制器通过API Server读取过来装换成自身的配置文件,载入到该进程之上。

基于demo.magedu.com主机名称空间default下的demoapp服务发布出去。

--rule=主机名/path=后端服务:端口
--class=ingressclass (kubectl get ingressclass)

kubectl create ingress demoapp --rule='demo.magedu.com/*'=demoapp:80 --class='nginx' -n default --dry-run=client -o yaml

标签:ingress,Service,Ingress,流量,Controller,API,k8s
From: https://www.cnblogs.com/OpenSourceSite/p/18407716

相关文章

  • 部署K8S集群(五):配置文件之Pod配置文件
    ●Pod是Kubernets中的基本执行单位,可以包含一个或多个容器。●Pod提供了容器间的网络和存储共享。apiVersion:v1kind:Podmetadata:name:my-podlabels:app:my-appspec:containers:#容器1:web页面#容器名称-name:web-container#容器......
  • k8s dashboard token 生成/获取
    创建示例用户在本指南中,我们将了解如何使用Kubernetes的服务帐户机制创建新用户、授予该用户管理员权限并使用与该用户绑定的承载令牌登录仪表板。对于以下每个和的代码片段ServiceAccount,ClusterRoleBinding您都应该将它们复制到新的清单文件(如)中,dashboard-adminuser.yaml并......
  • 结合GPT使用k8s部署awx-oprator
    这个错误表明你尝试添加的Helm仓库URL无法访问,或者index.yaml文件不存在,可能是AWXOperator的Helm仓库已经变更或不再支持这个URL。根据AWXOperator项目的最新文档,它不再使用Helm作为主要的安装方式,而是通过直接应用Kubernetes自定义资源(CRD)和Operator来安装......
  • k8s环境搭建
    1.创建主机,设置ip,hostname,firewalldselinux,Netmanage2.设置主机之间的ssh免密3.三个节点yum源配置1.docker2.k8s3.清空以及创建缓存yumcleanall&&yummakecache4.四个源镜像aliyun,epel,kubernetes,docker-ce4.三个节点主机映射5.三个节点安装常......
  • k8s如何部署服务
    在Kubernetes中,配置文件通常以YAML格式编写,用于定义各种资源,如Deployments、Services、Pods等。以下是一个简单的示例,展示了如何编写一个Deployment和一个Service的配置文件。1.Deployment配置文件deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:my-......
  • 使用kube-prometheus部署k8s监控---超详细(Kubernetes Deployment of Kubernetes Moni
    ......
  • Kubernetes 基础:Ingress的高可用部署
    前言在上一章节中,我们知道有以下几种方式可以实现对外暴露服务:NodePort(Pod设置HostNetWork同理)LoadBalancerExternalIP1.1背景但在实际环境中,我们很少直接使用这些方式来对外暴露服务,因为它们都有一个比较严重的问题,那就是需要占用节点端口。也就是说,占用节点端口......
  • k8s--实战入门
    NamespaceNamespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的n......
  • 部署K8S集群(四):部署MySQL
    密码文件:MySQLSecret#VGVzdA==->Test#ZGJyZWFkZXI=->root#cGFzc0AxMjM0->pass@1234mkdir-p/opt/mysqlmkdir-p/data/mysqlcat>/opt/mysql/mysql-secret.yaml<<EOFapiVersion:v1kind:Secretmetadata:name:mysql-secrettype:......
  • k8s集群部署:安装 kubeadm
    1、确保已经将SELinux设置为permissive模式:这些说明适用于Kubernetes1.31。#SetSELinuxinpermissivemode(effectivelydisablingit)sudosetenforce0sudosed-i's/^SELINUX=enforcing$/SELINUX=permissive/'/etc/selinux/config2、下载并安装相关软件......