安装 NGINX Ingress Controller
安装 NGINX Ingress Controller
1.部署 nginx-ingress-controller
1.1.下载项目
可以去github realease下载相应版本文件或者 git clone 文件。
git clone https://github.com/nginxinc/kubernetes-ingress.git --branch <version_number>
1.2. Configure RBAC
#cd 到 deployments 下
kubectl apply -f common/ns-and-sa.yaml
kubectl apply -f rbac/rbac.yaml
1.3. Create Common Resources
我这里是自己的环境所以没有创建 default-server-secret
kubectl apply -f common/nginx-config.yaml
kubectl apply -f common/ingress-class.yaml
1.4. Create Custom Resources
默认情况下,需要为 VirtualServer、VirtualServerRoute、TransportServer 和 Policy 创建自定义资源定义,否则 NGINX Ingress Controller Pod 将不会变为就绪状态。 如果您想禁用该要求,请将 -enable-custom-resources 命令行参数配置为 false 。
vi deployment/nginx-ingress.yaml,在
args:
下添加 - -enable-custom-resources=false
kubectl apply -f common/crds/k8s.nginx.org_virtualservers.yaml
kubectl apply -f common/crds/k8s.nginx.org_virtualserverroutes.yaml
kubectl apply -f common/crds/k8s.nginx.org_transportservers.yaml
kubectl apply -f common/crds/k8s.nginx.org_policies.yaml
kubectl apply -f common/crds/k8s.nginx.org_globalconfigurations.yaml
1.5. Deploying NGINX Ingress Controller
1.5.1 deployment
使用 LoadBalancer Service 需要部署 metallb,使用 NodePort Service 不需要。
kubectl apply -f deployment/nginx-ingress.yaml
# nodepart
kubectl create -f service/nodeport.yaml
#loadbalance
kubectl apply -f service/loadbalancer.yaml
1.5.2 daemonset
使用 daemonset, NGINX Ingress Controller 容器的端口 80 和 443 将映射到容器运行的节点的相同端口,通常使用额外一台 nginx 服务器作为集群入口,然后将域名映射到 nginx 服务器上。
kubectl apply -f daemon-set/nginx-ingress.yaml
nginx 配置参考
upstream workserver {
least_conn;
server 172.16.22.151:80 max_fails=3 fail_timeout=5s;
server 172.16.22.152:80 max_fails=3 fail_timeout=5s;
}
# server 中添加
location / {
proxy_buffer_size 8k;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_pass http://workserver;
}
2.部署 metallb
因为 K8S集群默认不带 loadbalance 功能,这里通过 metallb 来提供。
2.1.安装
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.12/config/manifests/metallb-native.yaml
2.2.创建资源
这里创建 l2 的配置,如果是给创建的 NGINX Ingress Controller service 使用可以给地址池分配一个IP,然后将域名都映射到这个 IP。
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: pool
namespace: metallb-system
spec:
addresses:
- 192.168.10.0/24 #地址段
- 192.168.9.1-192.168.9.5 #地址段
- fc00:f853:0ccd:e799::/124 #ipv6
- 192.168.10.10/32 #单个ip
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: l2advertisement
namespace: metallb-system
spec:
ipAddressPools:
- pool
License:
CC BY 4.0