K8S Ingress-Nginx导出TCP端口

ingress-nginx导出TCP端口

helm upgrade ingress-nginx导出redis 6379端口(这种方式最简单,接下为我们研究一下主要的流程原理)

整体流程大概是这样子的

  • SVC(NodePort:30009映射到后台26379端口,26379端口转发到26379-tcp)
    • DaemonSet/ingress-nginx-controller(26379-tcp转到controller容器的端口containerPort: 26379)
      • ingress-nginx-controller容器中有nginx,nginx监听26379端口
        • 从configMap中取的26379端口要转发的地址
          • develop/redis-cluster:6379
  • 用户请求流程
    • 访问30009NodePort端口
      • 映射到26379端口
        • ingress-nginx-controller中的nginx监听26379端口
          • 将26379端口转发至develop/redis-cluster:6379

添加configMap

复制代码
vi configMap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  26379: "develop/redis-cluster:6379" #从26379的TCP端口转发到Redis集群的6379端口,至于nodePort是哪个还未定

kubectl apply -f configMap.yaml -n ingress-nginx

也可以自己配置SVC

复制代码
编辑service, 即ClusterIP
  kubectl edit svc -n ingress-nginx ingress-nginx-controller
  - name: 26379-tcp #配置一个新的TCP端口,取名为26379-tcp
    nodePort: 30009 #导出对外的端口
    port: 26379 #监听26379端口
    protocol: TCP
    targetPort: 26379-tcp #转发到ds上的26379-tcp端口

配置DaemonSet

  • ingress-nginx-controller pod实际是Controlled By: DaemonSet/ingress-nginx-controller

  • 修改DaemonSet/ingress-nginx-controller

    • 将svc上监听到的26379端口转发到DaemonSet/ingress-nginx-controller上
  • DaemonSet/ingress-nginx-controller连接到ingress-nginx-controller对应的pod容器的26379端口上

    kubectl edit ds -n ingress-nginx ingress-nginx-controller

    • --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services

      复制代码
       ports:
       - containerPort: 80
         name: http
         protocol: TCP
       - containerPort: 443
         name: https
         protocol: TCP
       - containerPort: 8443
         name: webhook
         protocol: TCP
       - containerPort: 26379
         name: 26379-tcp
         protocol: TCP

    #查看SVC,已经有了26379端口,并绑定了nodePort端口30009
    [root@k8s-master01 ingress-nginx]# kubectl get svc -n ingress-nginx
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    ingress-nginx-controller LoadBalancer 10.99.163.44 80:31268/TCP,443:31052/TCP,26379:30009/TCP 3d11h
    ingress-nginx-controller-admission ClusterIP 10.100.131.12 443/TCP

查看nginx.conf代理配置

  • kubectl exec -it ingress-nginx-controller-lkzzh /bin/sh -n ingress-nginx

    • /etc/nginx
    • $ ls -l
    • cat nginx.conf
  • 监听26379端口,应该是configMap中的data的26379

    • 从configMap中取出26379端口要转发的地址
  • 转发到tcp-develop-redis-cluster-6379

    TCP services

    复制代码
          server {
                  preread_by_lua_block {
                          ngx.var.proxy_upstream_name="tcp-develop-redis-cluster-6379";
                  }
    
                  listen                  26379;
    
                  listen                  [::]:26379;
    
                  proxy_timeout           600s;
                  proxy_next_upstream     on;
                  proxy_next_upstream_timeout 600s;
                  proxy_next_upstream_tries   3;
    
                  proxy_pass              upstream_balancer;
    
          }

测试

  • telnet可以通过
  • telnet 192.168.221.131 30009
相关推荐
qq_349447958 分钟前
十四、k8s集群安装kube-state-metrics 组件
docker·容器·kubernetes
AOwhisky34 分钟前
Kubernetes(K8s)学习笔记(第十四期):集群存储与有状态应用(下篇):StatefulSet 有状态应用管理
redis·笔记·mysql·云原生·kubernetes·云计算·k8s
FPGA小迷弟1 小时前
vivado中的AXI Interconnect到底应该怎么用,他的底层原理是什么,一篇文档全部理清楚!!!
网络协议·tcp/ip·fpga开发·verilog·fpga
艾文伯特1 小时前
k8s-1.35-ubuntu-安装文档.md
ubuntu·容器·kubernetes
AOwhisky1 小时前
kubernetes(K8s)学习笔记:第八期与第九期核心知识点自测与详解
笔记·云原生·kubernetes·云计算·k8s·集群·网络策略
条纹布鲁斯1 小时前
ubuntu 26.04 k8s 1.36 ceph
kubernetes
爱吃龙利鱼1 小时前
k8s指定命名空间kubeconfig文件生成教程
容器·kubernetes
芷栀夏2 小时前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
huainingning15 小时前
华三ACL单向TCP互通组网-通过Established状态回包实现
运维·网络·tcp/ip
蜀道山老天师15 小时前
K8s 数据存储全解析:从 EmptyDir 到 PV/PVC
云原生·容器·kubernetes