文章

安装 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

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