K8s 安装 Ingress Nginx Controller

一、概述

  • Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP,可以提供负载均衡、SSL 终结和基于名称的虚拟托管
  • Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由。流量路由由 Ingress 资源所定义的规则来控制

ingress

  • 通过配置,Ingress 可为 Service 提供外部可访问的 URL、对其流量作负载均衡、终止 SSL/TLS,以及基于名称的虚拟托管等能力。Ingress 控制器 负责完成 Ingress 的工作,具体实现上通常会使用某个负载均衡器,不过也可以配置边缘路由器或其他前端来帮助处理流量
  • Ingress 不会随意公开端口或协议。将 HTTP 和 HTTPS 以外的服务开放到 Internet 时,通常使用 Service.Type=NodePortService.Type=LoadBalancer 类型的 Service
  • Ingress Nginx 是围绕 Kubernetes Ingress 资源构建的,使用 ConfigMap 来存储控制器配置

二、安装

1. 有 LoadBalancer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
$ helm repo update
$ helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
$ kubectl edit svc -n ingress-nginx ingress-nginx-controller
annotations:
lb.kubesphere.io/v1alpha1: openelb
protocol.openelb.kubesphere.io/v1alpha1: layer2
eip.openelb.kubesphere.io/v1alpha2: eip-pool

$ kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.100.192.199 10.4.7.211 80:30732/TCP,443:32473/TCP 5m59s
ingress-nginx-controller-admission ClusterIP 10.106.183.157 <none> 443/TCP 5m59s
  • 创建后端的 nginx 的 Pod 和 Service:
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
26
27
28
29
30
apiVersion: apps/v1
kind: Deployment
metadata:
name: svc-demo
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: nginx:1.18.0
name: svc-demo
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: svc-demo
spec:
selector:
app: myapp
ports:
- targetPort: 80
port: 8080
  • 创建 ingress 规则
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- host: 211.com
http:
paths:
- path: /web
pathType: Prefix
backend:
service:
name: svc-demo
port:
number: 8080
  • 配置 Windows 的 hosts 解析
1
10.4.7.211 211.com

2. 无 LoadBalancer

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查找ingress-nginx的chart包
$ helm search repo ingress-nginx
NAME CHART VERSION APP VERSION DESCRIPTION
ingress-nginx/ingress-nginx 4.8.1 1.9.1 Ingress controller for Kubernetes using NGINX a...
# 下载chart包
$ helm pull ingress-nginx/ingress-nginx
$ tar -zxvf ingress-nginx-4.8.1.tgz
$ cd ingress-nginx
$ vi values.yaml
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
kind: DaemonSet
# 安装
$ kubectl create ns ingress-nginx
$ helm install ingress-nginx -n ingress-nginx .
# 当前只能安装到node节点,可以配置values.yaml中的nodeSelector指定节点安装,也可以去除master污点来部署到主节点

参考