【kubernetes】Minikube-使用NGINX-ingress控制器访问应用

Minikube-使用NGINX-ingress控制器访问应用

Ingress 不会公开任意端口或协议。 将 HTTP 和 HTTPS 以外的服务公开到 Internet 时,通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。

启动Ingress

为了启用 NGINIX Ingress 控制器,可以运行下面的命令:

1
minikube addons enable ingress

检查验证 NGINX Ingress 控制器处于运行状态:

1
2
3
4
# 老版本的minikube使用
# kubectl get pods -n kube-system
kubectl get pods -n ingress-nginx

请确保可以在输出中看到一个名称以nginx-ingress-controller-为前缀的Pod

部署一个nginx应用

  1. 创建Deployment

    1
    kubectl create deployment web --image=nginx:1.21.6-alpine
  2. 暴露Deployment

    1
    kubectl expose deployment web --type=NodePort --port 80
  3. 使用节点端口访问服务

    1
    minikube service web --url

创建一个Ingress

  1. 通过运行下面的命令创建 Ingress 对象:

example-ingress.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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: 80
1
2
3
kubectl apply -f example-ingress.yaml

ingress.networking.k8s.io/example-ingress created
  1. 验证 IP 地址已被设置

    1
    2
    3
    $ kc get ingress  
    NAME CLASS HOSTS ADDRESS PORTS AGE
    example-ingress nginx hello-world.info 80 8s
  2. /etc/hosts里面添加host

    注: minikube ip 获取外部ip地址配置在host中,Ingress中显示的回事内部ip地址

    1
    192.168.49.2 hello-world.info
  3. 验证通过Ingress控制器能够转发请求流量

    1
    curl hello-world.info

创建第二个Deployment

  1. 创建Deployment

    1
    kubectl create deployment web2 --image=nginx:1.21.6-alpine
  2. 暴露Deployment

    1
    kubectl expose deployment web2 --type=NodePort --port 80

修改现有Ingress.yaml

  1. 通过运行下面的命令创建 Ingress 对象:

example-ingress.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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: 80
- path: /v2 # 这里是新增的
pathType: Prefix
backend:
service:
name: web2
port:
number: 80
1
2
3
kubectl apply -f example-ingress.yaml

ingress.networking.k8s.io/example-ingress configured
  1. 访问第一个第二个应用
    1
    2
    3
    4
    5
    # 第一个
    curl http://hello-world.info

    # 第二个
    curl http://hello-world.info/v2

参考

Ingress

Ingress 控制器

在 Minikube 环境中使用 NGINX Ingress 控制器配置 Ingress
How NGINX Ingress Controller Works