Ingress 就应该这么用!轻松玩转Kubernetes流量入口管理

什么是Ingress

Ingress 将 HTTP 和 HTTPS 路由从集群外部公开到 集群内的服务。流量路由由入口资源上定义的规则控制。

这是一个简单的示例,其中 Ingress 将其所有流量发送到一个服务:
Ingress 就应该这么用!轻松玩转Kubernetes流量入口管理_第1张图片
Ingress 可以配置为提供服务外部可访问的 URL、负载平衡流量、终止 SSL/TLS 以及提供基于名称的虚拟托管。Ingress 控制器负责 实现 Ingress,通常使用负载均衡器,但它也可能配置边缘路由器或其他前端来帮助处理流量。

先决条件

必须有一个Ingress 控制器 才能满足 Ingress。仅创建 Ingress 资源是没有效果的。因此需要先部署 Ingress 控制器,例如ingress-nginx。也可以从多个Ingress 控制器中进行选择。

本系列均在Minikube基础上搭建的k8s,因此首先介绍如何在Minikube下安装ingress。

Minikube 安装ingress

Ingress安装很简单,Minikube里面带了Ingress附件。

  • 安装ingress
minikube addons enable ingress

Ingress 就应该这么用!轻松玩转Kubernetes流量入口管理_第2张图片

  • 禁用ingress
minikube addons disable ingress

验证 NGINX Ingress 控制器是否正在运行

kubectl get pods -n ingress-nginx

输出类似于:

Ingress 就应该这么用!轻松玩转Kubernetes流量入口管理_第3张图片

部署Hello World 示例

  1. 使用以下命令创建deployment:
kubectl create deployment web --image=gcr.io/google-samples/hello-app:1.0

若pull image failed,可以执行docker search hello-app:1.0,将image进行替换。

Ingress 就应该这么用!轻松玩转Kubernetes流量入口管理_第4张图片

  1. 将端口暴露:
kubectl expose deployment web --type=NodePort --port=8080
  1. 验证服务已创建并且在节点端口上可用
kubectl get service web
  1. 通过 NodePort 访问服务
minikube service web --url

Ingress 就应该这么用!轻松玩转Kubernetes流量入口管理_第5张图片
访问即可:

curl http://127.0.0.1:57592
Hello, world!
Version: 1.0.0
Hostname: web-55b8c6998d-8k564

创建Ingress

  1. vim example-ingress.yaml

以下yaml定义了一个通过 hello-world.info 将流量发送到服务的入口。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
    - host: hello-world.info
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 8080

执行:

kubectl apply -f https://k8s.io/examples/service/networking/example-ingress.yaml
  1. 验证IP地址是否被设置。
kubectl get ingress
  1. 验证入口控制器是否正在引导流量
curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info

长时间没有内容输出,可以新打开一个终端,并执行:minikube tunnel

Ingress 就应该这么用!轻松玩转Kubernetes流量入口管理_第6张图片

创建第二个部署

  1. 使用以下命令创建另一个 Deployment
kubectl create deployment web2 --image=gcr.io/google-samples/hello-app:2.0
  1. 公开第二个 Deployment
kubectl expose deployment web2 --port=8080 --type=NodePort

编辑现有 Ingress

- path: /v2
  pathType: Prefix
  backend:
    service:
      name: web2
      port:
        number: 8080
  1. 应用更改
kubectl apply -f example-ingress.yaml

测试 Ingress

  1. 访问 Hello World 应用程序的第一个版本
curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info

有如下输出:

Hello, world!
Version: 1.0.0
Hostname: web-55b8c6998d-8k564
  1. 访问 Hello World 应用程序的第二版
curl --resolve "hello-world.info:80:$( minikube ip )" -i http://hello-world.info/v2

有如下输出:

Hello, world!
Version: 2.0.0
Hostname: web2-75cd47646f-t8cjk

你可能感兴趣的:(kubernetes,kubernetes,容器,云原生)