Kubernetes(K8S)(九)——ingress认证配置、地址重写

本文详细介绍了如何在Kubernetes中配置Ingress的认证,包括BasicAuth和TLS加密认证,并探讨了如何实现会话保持。同时,文章还涵盖了Ingress的地址重写功能,包括重定向应用程序根路径和流量重定向到特定URI的策略,提供了具体的配置步骤和官方参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Ingress认证配置

参考官网:https://kubernetes.github.io/ingress-nginx/examples/auth/basic/

1.1 配置认证auth

在master(server1):
yum install -y httpd-tools安装工具

在这里插入图片描述
Ingress认证配置

[kubeadm@server1 ~]$ cd mainfest/
[kubeadm@server1 mainfest]$  htpasswd -c auth red ##创建用户认证文件,-c会覆盖
New password: 
Re-type new password: 
Adding password for user red
[kubeadm@server1 mainfest]$ ls
auth         cronjob.yml    deployment.yml  ingress.yml  job.yml           pod2.yml  rs.yml       tls.crt  tls.yml
calico.yaml  daemonset.yml  deploy.yaml     init.yml     kube-flannel.yml  pod.yml   service.yml  tls.key
[kubeadm@server1 mainfest]$  kubectl create secret generic basic-auth --from-file=auth 
secret/basic-auth created ##通过secret卷使认证注入容器
[kubeadm@server1 mainfest]$ kubectl get secrets 
NAME                  TYPE                                  DATA   AGE
basic-auth            Opaque                                1      12s
default-token-5qqxc   kubernetes.io/service-account-token   3      8d
tls-secret            kubernetes.io/tls                     2      14h
[kubeadm@server1 mainfest]$ kubectl get secrets basic-auth -o yaml
apiVersion: v1
data:
  auth: cmVkOiRhcHIxJEdmMU9Tb3JqJG5jUy9TZGFrRkxsbThwejZtNDdhLzAK
kind: Secret
metadata:
  creationTimestamp: "2020-06-27T09:51:46Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {
   
   }
        f:auth: {
   
   }
      f:type: {
   
   }
    manager: kubectl
    operation: Update
    time: "2020-06-27T09:51:46Z"
  name: basic-auth
  namespace: default
  resourceVersion: "361577"
  selfLink: /api/v1/namespaces/default/secrets/basic-auth
  uid: 08b86093-539a-4c39-9a05-b7e9fbb9ec41
type: Opaque
[kubeadm@server1 mainfest]$ kubectl describe secrets basic-auth 
Name:         basic-auth
Namespace:    default
Labels:       <none>
Annotations:  <none>
Type:  Opaque
Data
====
auth:  42 bytes

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

[kubeadm@server1 mainfest]$ cat pod2.yml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myappv1
  template:
    metadata:
      labels:
        app: myappv1
    spec:
      containers:
      - name: myappv1
        image: myapp:v1
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myappv2
  template:
    metadata:
      labels:
        app: myappv2
    spec:
      containers:
      - name: myappv2
        image: myapp:v2
[kubeadm@server1 mainfest]$ kubectl apply -f  pod2.yml
[kubeadm@server1 mainfest]$ cat service.yml 
kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: myappv1
  type: ClusterIP
---
kind: Service
apiVersion: v1
metadata:
  name: myservice2
spec:
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  selector:
    app: myappv2
  type: ClusterIP
[kubeadm@server1 mainfest]$ kubectl apply -f  service.yml
[kubeadm@server1 mainfest]$ vim secret.yml
[kubeadm@server1 mainfest]$ cat secret.yml 
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
met
<think>嗯,用户想了解Kubernetes和Nginx之间的关系以及它们如何协同工作,特别是集成方式和作用。这个问题很基础但也很重要,涉及到Kubernetes网络架构的核心组件。用户可能正在学习Kubernetes的网络管理部分,或者在工作中需要部署web应用。从引用内容看,用户已经接触过Ingress、Controller等概念,但需要系统化的梳理。用户特别强调"关系"和"协同工作",说明需要整体框架而非碎片化知识。深入分析用户需求:1)基础关系:Nginx如何从独立服务转变为K8s网络基础设施?2)价值定位:为什么选择Nginx而不是其他负载均衡方案?3)技术动因:K8s需要Nginx解决哪些原生缺陷?引用材料提供了重要线索:引用[5]提到NginxIngressController是"守门人",这是个很好的切入点。引用[1][2]展示了配置方式的进化,引用[3]则指向定制化需求。引用[4]的架构图特别关键,正好用来解释数据/控制平面协作。构建回答时要注意层次:先解释K8s原生服务暴露方式的局限性,自然引出对7层代理的需求。然后聚焦Nginx的三大价值——这正是用户问的"作用"部分。技术实现上,需要区分控制平面(Controller组件)和数据平面(Nginx进程)的分工,引用[4]的架构图很适用。用户可能忽略的要点在于部署模式差异:传统Nginx是独立部署,而K8s集成后变成动态生成配置的集群组件。补充的自定义部署场景特别重要,引用[3]的自编译案例说明高级用户可能需要这个知识。</think> Kubernetes 与 Nginx 的集成主要体现在 **Nginx Ingress Controller** 的部署和使用上,二者协同工作为集群提供高效、灵活的流量管理和服务暴露能力。以下是核心集成方式及作用: --- ### **1. Nginx Ingress Controller 的角色** **作用**: - **7层负载均衡**:解析 HTTP/HTTPS 请求的 URI、域名等,将流量按规则路由至后端 Service。 - **统一入口网关**:替代 NodePort/LoadBalancer 暴露服务,减少公网 IP 和端口管理成本。 - **高级路由能力**:支持路径重写、SSL 终止、熔断限流、灰度发布等(需搭配 Annotation 或 CRD)。 **集成方式**: - 在 Kubernetes 中部署 **Nginx Ingress Controller**(即独立 Pod),监听 Ingress 资源变化。 - 通过 **ConfigMap** 管理 Nginx 配置模板(如超时时间、日志格式),实现动态更新 [^1][^5]。 --- ### **2. 核心协同流程** ```mermaid graph LR A[用户创建 Ingress 资源] --> B[Ingress Controller 监听到变化] B --> C[生成 Nginx 配置文件] C --> D[重载 Nginx 服务] D --> E[外部请求经 Nginx 路由至后端 Pod] ``` **关键组件交互**(引用自 [^4]): ``` 监控变化 提供配置 Ingress 资源 --(定义规则)--> ConfigMap --(配置模板)--> Nginx Controller ↑ ↓ 用户定义 动态生成配置并重载 ↓ ↓ Kubernetes API Server ←------------ Nginx 进程 (数据平面) ``` --- ### **3. 典型集成方案** #### **(1) 标准部署(Helm 或 Manifest)** ```bash # 使用 Helm 部署(引用自 [^2]) helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx helm install nginx-ingress ingress-nginx/ingress-nginx --namespace nginx-ingress ``` **作用**: - 自动创建 Deployment、Service(类型为 LoadBalancer/NodePort)、RBAC 规则等。 - 默认集成 Prometheus 指标接口,便于监控。 #### **(2) 自定义 Nginx 编译集成** **场景**:需要特定模块(如 GeoIP、Lua)或安全加固(引用自 [^3])。 **步骤**: 1. 从源码编译 Nginx,替换官方镜像中的二进制文件。 2. 构建新 Docker 镜像并推送至私有仓库。 3. 修改 Ingress Controller 的 Deployment 使用自定义镜像。 **优势**:避免云厂商锁定,满足合规性需求。 --- ### **4. 与传统 Nginx 的差异对比** | **维度** | 传统 Nginx | Kubernetes Nginx Ingress Controller | |-------------------|-------------------------------|-------------------------------------------| | **配置方式** | 手动编辑 nginx.conf | 通过 Ingress 资源声明式配置 | | **动态更新** | 需手动重载 `nginx -s reload` | Controller 自动监听并重载 | | **高可用** | 需自建 Keepalived | Kubernetes 自动调度 Pod + Service 负载均衡 | | **扩展性** | 垂直扩容 | 水平扩容(HPA 支持) | --- ### **5. 协同价值总结** 1. **基础设施解耦**: Nginx 作为数据平面处理流量,Kubernetes 控制平面管理声明式配置,职责分离 [^5]。 2. **弹性与自动化**: 结合 HPA 自动扩缩容,无需人工干预流量激增场景。 3. **安全强化**: 集中管理 SSL 证书(如 cert-manager 自动续签),减少配置泄露风险。 4. **多云兼容性**: 统一入口屏蔽底层基础设施差异(AWS/阿里云等)[^4]。 --- **相关问题**: 1. 如何为 Nginx Ingress Controller 配置自定义错误页面? 2. Nginx Ingress 与 Traefik 的性能差异如何测试? 3. 如何通过 Ingress 实现金丝雀发布(Canary Release)? 4. 为什么需要避免在 Pod 内直接部署 Nginx? > 深度实践可参考官方文档:[Kubernetes Nginx Ingress 项目](https://github.com/kubernetes/ingress-nginx)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值