Kubernetes - 实战:Ingress-nginx介绍及演示

Kubernetes Ingress-nginx 介绍

Ingress 是 Kubernetes 中的一个 API 对象,它定义了外部流量如何访问集群内部的服务。Ingress-nginx 是一个流行的 Ingress 控制器实现,它基于 Nginx 服务器,提供七层负载均衡、URL 路由、SSL 终止等功能。

Ingress-nginx 功能

  1. 路由转发:Ingress-nginx 可以根据 Ingress 资源的规则将到达集群的请求路由到相应服务的 Pod 上。

  2. SSL/TLS 终止:支持将外部的 HTTPS 流量转变为集群内部的 HTTP 流量,便于安全传输数据。

  3. 基于域名和路径的路由:可以通过 Ingress 规则轻松实现基于 Host 和 URL 路径的路由策略。

  4. 会话亲和性(Session Affinity):支持基于客户端 IP 的会话保持,确保同一客户端的后续请求被转发到同一后端 Pod。

  5. 重写和重定向:可以配置 Ingress 规则来执行 URL 重写和重定向操作。

实战演示:创建 Ingress-nginx 和 Ingress 资源

步骤 1:安装 Ingress-nginx 控制器

首先,确保你已经在 Kubernetes 集群中安装了 Ingress-nginx 控制器。可以通过以下命令使用 Helm 安装:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx

步骤 2:创建示例服务和部署

创建两个 Deployment 和对应的 Service,比如一个是网站 A,另一个是网站 B:

# website-a.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: website-a
spec:
  replicas: 1
  selector:
    matchLabels:
      app: website-a
  template:
    metadata:
      labels:
        app: website-a
    spec:
      containers:
      - name: website-a
        image: nginx
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: website-a
spec:
  selector:
    app: website-a
  ports:
  - port: 80
    targetPort: 80

# website-b.yaml
# 类似地创建 website-b 的 Deployment 和 Service

执行命令创建这两个服务:

kubectl apply -f website-a.yaml
kubectl apply -f website-b.yaml

步骤 3:创建 Ingress 资源

创建一个 Ingress 资源,配置基于域名的路由规则:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: multihost-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: www.website-a.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: website-a
            port:
              name: http
  - host: www.website-b.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: website-b
            port:
              name: http

执行命令创建 Ingress:

kubectl apply -f ingress.yaml

现在,如果你已经配置了外部负载均衡器(如云服务商提供的负载均衡器,或 NodePort 服务配合 DNAT 规则),并且 DNS 解析已经设置好,那么通过 www.website-a.comwww.website-b.com 就可以访问到各自的网站服务了。注意,对于本地或开发环境,可能还需要额外配置 hosts 文件或者使用 nip.io 等服务来模拟 DNS 解析。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值