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

Kubernetes(九) Ingress 与安全机制详解

一、Ingress 服务

1. Ingress 简介

在 Kubernetes 中,Service 负责集群内部的服务发现和负载均衡,但 Pod IP 和 Service 的 ClusterIP 仅在集群内部可见。为了让外部应用能够访问集群内服务,Kubernetes 提供了多种方案:

服务暴露方案对比

方案

特点

适用场景

NodePort

将服务暴露在节点网络上,端口范围固定(30000-32767)

测试环境,端口管理困难

LoadBalancer

需要云厂商支持,自动创建负载均衡器

公有云环境,需要额外费用

externalIPs

为 Service 分配外部 IP

需要精细控制 IP 分配的场景

​Ingress​

​七层反向代理,基于域名/URL路径转发​

​生产环境,多个HTTP/HTTPS服务​

Ingress 可以理解为"Service 的 Service",它仅用一个或少量的公网 IP/LB,即可同时将多个 HTTP/HTTPS 服务暴露到外网。

​核心概念分离​​:Ingress 负责​​规则定义​​,Ingress Controller 负责​​按规则转发​​。

2. Ingress 的组成

Ingress(规则定义)
  • 以 YAML 配置的 API 对象

  • 定义请求如何转发到 Service 的规则

  • 提供外部 URL、负载均衡、SSL/TLS、基于域名的反向代理功能

Ingress Controller(转发器)
  • 解析 Ingress 规则并实现反向代理与负载均衡

  • 不是 K8s 自带组件,有多种实现:

    • 官方维护:GCE、ingress-nginx

    • 第三方实现:Traefik、Contour、HAProxy Ingress 等

典型的工作形态:一个 Pod 内同时运行​​守护进程​​(监控集群并生成配置)与​​反向代理程序​​(如 Nginx)。

3. Ingress 工作原理

  1. ​动态感知​​:Ingress Controller 与 APIServer 交互,感知 Ingress 规则变化

  2. ​配置生成​​:读取规则并按模板生成 Nginx 配置

  3. ​配置写入​​:将配置写入 /etc/nginx.conf文件

  4. ​重载生效​​:执行 reload 使配置生效,实现域名分流

4. Ingress 暴露服务的三种方式

方式一:Deployment + LoadBalancer Service
  • ​适用场景​​:公有云环境

  • ​特点​​:LB 自动创建并绑定公网 IP,域名解析指向该地址

  • ​优势​​:云厂商托管,管理简便

  • ​劣势​​:产生额外费用

方式二:DaemonSet + HostNetwork + nodeSelector(推荐生产环境)
  • ​适用场景​​:大并发生产环境

  • ​特点​​:使用宿主机网络,直接占用 80/443 端口

  • ​优势​​:链路最短、性能最好

  • ​劣势​​:一个节点只能部署一个 Controller Pod

​实施步骤​​:

# 1. 节点打标签
kubectl label node node02 ingress=true# 2. 修改配置启用 HostNetwork
# 在 mandatory.yaml 中设置 hostNetwork: true 和 nodeSelector# 3. 部署并验证
kubectl apply -f mandatory.yaml
netstat -lntp | grep nginx
方式三:Deployment + NodePort Service
  • ​适用场景​​:测试环境或需要前置负载均衡器的场景

  • ​特点​​:通过 NodePort 暴露,通常前置 LB

  • ​优势​​:配置相对简单

  • ​劣势​​:多一层 NAT,大流量场景影响性能

5. Ingress 高级功能

HTTPS 代理访问
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-https
spec:tls:- hosts:- www3.benet.comsecretName: tls-secretrules:- host: www3.benet.comhttp:paths:- path: /backend:service:name: nginx-svcport:number: 80
认证与重写
  • ​BasicAuth​​:基于 HTTP 基本认证

  • ​Rewrite​​:URL 重写和重定向

  • ​路径匹配​​:Prefix(前缀匹配)和 Exact(精确匹配)

6. 总结与最佳实践

​Ingress 选择建议​​:

  • ​公有云​​:优先选择 LoadBalancer 方式

  • ​私有云大并发​​:DaemonSet + HostNetwork 方式

  • ​测试环境​​:NodePort 方式

​生产环境建议​​:

  • 配合多节点部署 + 前置 LB

  • 完善的监控告警(Prometheus 采集 10254 端口)

  • 证书管理与访问控制加固


二、Kubernetes 安全机制

1. 安全机制概述

Kubernetes 安全机制围绕保护 API Server 设计,客户端请求需要经过三道关卡:

  1. ​认证(Authentication)​​:确认身份

  2. ​鉴权(Authorization)​​:权限检查

  3. ​准入控制(Admission Control)​​:请求验证和变更

2. 认证机制

支持的认证方式
  • ​HTTP Token 认证​​:携带 Token 进行认证

  • ​HTTP Basic 认证​​:用户名密码 Base64 编码

  • ​HTTPS 证书认证​​:基于 CA 根证书的双向 TLS 认证(最安全)

Service Account

用于解决 Pod 到 API Server 的认证问题:

# 查看默认 Service Account
kubectl get sa# 查看 Pod 中挂载的认证信息
kubectl exec -it <pod-name> -- ls /var/run/secrets/kubernetes.io/serviceaccount/
# ca.crt  namespace  token

3. 鉴权机制(RBAC)

RBAC(基于角色的访问控制)是 Kubernetes 1.6 之后的默认鉴权机制。

核心资源对象
  • ​Role/ClusterRole​​:定义权限集合

  • ​RoleBinding/ClusterRoleBinding​​:将角色绑定到主体

RBAC 配置示例
# 定义 Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: defaultname: pod-reader
rules:
- apiGroups: [""]resources: ["pods"]verbs: ["get", "watch", "list"]# 绑定 Role 到用户
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:name: read-podsnamespace: default
subjects:
- kind: Username: zhangsanapiGroup: rbac.authorization.k8s.io
roleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io

4. 实践:创建命名空间受限用户

步骤概述
  1. ​创建用户证书​​:使用 cfssl 工具生成用户证书

  2. ​生成 kubeconfig​​:配置集群、用户认证和上下文

  3. ​RBAC 授权​​:创建 Role 和 RoleBinding 限制权限

  4. ​权限验证​​:测试用户权限范围

关键命令
# 生成用户证书
cfssl gencert -ca=ca.crt -ca-key=ca.key -profile=kubernetes zhangsan-csr.json | cfssljson -bare zhangsan# 创建 kubeconfig
kubectl config set-credentials zhangsan \--client-key=zhangsan-key.pem \--client-certificate=zhangsan.pem \--embed-certs=true \--kubeconfig=zhangsan.kubeconfig

5. 准入控制

准入控制器是 API Server 的插件链,用于在对象持久化前进行验证和变更。

常用准入控制器
  • ​NamespaceLifecycle​​:命名空间生命周期管理

  • ​LimitRanger​​:资源配额限制

  • ​ServiceAccount​​:自动注入 ServiceAccount

  • ​ResourceQuota​​:命名空间级资源配额

  • ​NodeRestriction​​:限制节点权限

三、总结

Ingress 核心要点

  1. ​概念分离​​:Ingress 定义规则,Controller 实现转发

  2. ​暴露方式​​:根据环境选择合适方案(LB/HostNetwork/NodePort)

  3. ​生产推荐​​:DaemonSet + HostNetwork 方式性能最优

  4. ​功能丰富​​:支持 HTTPS、认证、重写等高级功能

安全机制核心要点

  1. ​三层防护​​:认证 → 鉴权 → 准入控制

  2. ​RBAC 主流​​:基于角色的细粒度权限控制

  3. ​证书认证​​:HTTPS 证书认证安全性最高

  4. ​实践原则​​:遵循最小权限原则,定期审计权限

最佳实践结合

在生产环境中,应该:

  • 使用安全的 Ingress 暴露方式

  • 实施严格的 RBAC 权限控制

  • 定期轮换证书和 Token

  • 启用合适的准入控制器

  • 建立完善的监控和审计日志

通过合理配置 Ingress 和安全机制,可以构建既高效又安全的 Kubernetes 集群环境。

http://www.dtcms.com/a/508890.html

相关文章:

  • 河南濮阳网站建设服务器网站怎么用
  • 强化学习-基本概念
  • 盘锦企业网站建设网站建设投资资金
  • 摄影行业网站做网站 分类搜索
  • 广东网站备案要求宁波网站建设七米
  • 秦皇岛做网站seo的移动营销做手机网站
  • 对数器(如何检验算法是否正确)
  • suricata之PoolThread
  • 教育课程网站建设Iis wordpress无法发表文章
  • 怎样制作免费的网站邯郸手机网站建设费用
  • 自己做的腾讯充值网站科技小发明小制作
  • Android studio 修改包名
  • legacyForge插件(2)
  • 百度做个网站多少钱餐饮vi设计一套多少钱
  • 新网站百度收录要几天注册公司地址可以用家庭地址
  • YOLOv4 深度解析:单 GPU 可训的目标检测性能王者
  • 建设网站征集图片的通知织梦做网站也是模板吗
  • 免费做调查问卷的网站个人外贸网站制作
  • Kafka面试精讲 Day 25:Kafka与大数据生态集成
  • 中小学网站建设规范培训网站官网
  • 开鲁网站seo转接如何建设一个收费的影视图文网站
  • 自己做的网站打不开了h5网站架设
  • 天翼云OS2.0.1快速查看CPU架构
  • 5.类和对象(下)
  • 树莓派控制板载LED闪烁
  • 上海专业网站建设平台深圳罗湖高端网站建设
  • 怎么让程序更高效地连起来?
  • 网站 商城 app 建设银川网站建设nx110
  • 泉州建设网站公司网站建设新闻 常识
  • 从零搭建本地化 RAG 聊天助手:从环境配置到核心逻辑全解析