nginx-ingress-1.6.4安装

  • 官方地址:

https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.6.4/deploy/static/provider/cloud/deploy.yaml

  • 配置image参数为阿里云:
    registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.6.4

    如何kubectl describe pod -n ingress-nginx 查看镜像拉取失败,先用docker pull一下进行调整正确后填入
  • 已修改好的ingress-nginx-1.6.4文件:
    ingress-nginx-aliyuan.yaml
  • 使用kubectl apply -f ingress-nginx.yaml部署

nodeport方式配置tcp、udp端口发布

1、修改配置文件开启端口功能:

修改ingress-controller的deployment配置或安装时修改yaml文件,在位置“-args:”中增加开启端口转发配置。
kubectl edit deployments.apps -n ingress-nginx ingress-nginx-controller

- args部分添加开启端口转发配置
    spec:
      containers:
      - args:
        - /nginx-ingress-controller
        - --publish-service=$(POD_NAMESPACE)/ingress-nginx-controller
        - --election-id=ingress-controller-leader
        - --controller-class=k8s.io/ingress-nginx
        - --ingress-class=nginx
        - --configmap=$(POD_NAMESPACE)/ingress-nginx-controller
        - --validating-webhook=:8443
        - --validating-webhook-certificate=/usr/local/certificates/cert
        - --validating-webhook-key=/usr/local/certificates/key
        - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services   ##打开tcp端口转发
        - --udp-services-configmap=$(POD_NAMESPACE)/udp-services    ##打开udp端口转发

2、修改默认30000-32767端口限制

k8s和k3s中ingress默认都只能使用node节点的30000-32767端口发布,如果想要使用其他端口,需要修改默认端口限制。

  • 停止服务
    systemctl stop k3s
  • 修改启动配置
    vi /etc/systemd/system/k3s.service # 修改配置,保存并退出
    配置文件修改如下,修改ExecStart后内容

    ExecStart=/usr/local/bin/k3s \
      server \
          '--disable=traefik' \
             --kube-apiserver-arg service-node-port-range=1-65535   ##增加此启动项修改端口范围。
  • 重新加载同步
    systemctl daemon-reload
  • 启动服务
    systemctl start k3s

3、配置svc

示例发布dns服务器到node节点53端口,pod默认配置即可:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: myapp-adguardhome
  name: myapp-adguardhome-svc
  namespace: my-app
spec:
  ports:
  - port: 53    ##指定集群端口
    name: tcp-53   ##指定名称
    protocol: TCP    ##指定协议
    targetPort: 53  ##指定pod端口
    nodePort: 53   ##指定nodePort端口
  - port: 53       ##......
    name: udp-53
    protocol: UDP
    targetPort: 53
    nodePort: 53
  - port: 3000
    name: tcp-3000
    protocol: TCP
    targetPort: 3000
    nodePort: 3000
  selector:
    app: myapp-adguardhome
  type: NodePort     ##类型为NodePort

4、配置configmap

  • 配置文件格式如下所示:

    data:
     port: "<namespace>/<service name>:<service port>"
      53: "my-app/myapp-adguardhome-svc:53"
    # port: ingress对外暴露的端口
    # namespace: 应用所在的namespace
    # service name: 应用的service name(svc)
    # service port: 应用的service port(svc端口)
  • 发布UDP端口

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: tcp-services    ## name的值与ingress配置文件args参数中添加的一致。
    namespace: ingress-nginx
    data:
    53: "my-app/myapp-adguardhome-svc:53"
    3000: "my-app/myapp-adguardhome-svc:3000"
  • 发布 TCP端口

    apiVersion: v1
    kind: ConfigMap
    metadata:
    name: udp-services  ## name的值与ingress配置文件args参数中添加的一致。
    namespace: ingress-nginx
    data:
    53: "my-app/myapp-adguardhome-svc:53"

    以上配置完成,可以通过[nodeip:端口]访问服务,如果已经有域名解析到node主机也可以通过[域名:端口]访问。


解决上传文件大小nginx-ingress配置修改

解决 413 Request Entity Too Large 报错

1、修改集群全局配置

  • 查看configmap名称
    kubectl edit deploy -n ingress-nginx       nginx-ingress-controller 

          spec:
            containers:
            \- [args](https://so.csdn.net/so/search?q=args&spm=1001.2101.3001.7020):
              \- /nginx-ingress-controller
              \- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
              \- --configmap=$(POD_NAMESPACE)/nginx-configuration    //确认configmap名称
              \- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
              \- --udp-services-configmap=$(POD_NAMESPACE)/udp-services
              \- --publish-service=$(POD_NAMESPACE)/ingress-nginx
              \- --annotations-prefix=nginx.ingress.kubernetes.io
  • 编辑configmap:
    kubectl edit cm -n ingress-nginx  nginx-configuration

    kind: ConfigMap
    apiVersion: v1
    //增加以下内容
    data:
      client-header-buffer-size: 20m
      compute-full-forwarded-for: "true"
      forwarded-for-header: X-Forwarded-For
      large-client-header-buffers: 4 1024k
      proxy-body-size: 50m    //配置上传文件限制
      use-forwarded-headers: "true"
    //
    metadata:
      name: nginx-ingress-controller
      namespace: default
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx

2、针对单个服务的ingress配置

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-body-size: 1024m
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "600"

3、老版本配置:

nginx.org/client-max-body-size: 1024m

官方链接:ConfigMap - NGINX Ingress Controller

原文:https://blog.csdn.net/ligaoman521/article/details/121775593