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
相关推荐
新时代农民工~7 分钟前
【双机高可用部署方案-前后端部署】
java·nginx·springboot
wuyk55525 分钟前
《WiFi 嵌入式物联网开发全套实战》| 第 12 章 Linux 系统 WiFi 常用命令全集:iw/iwlist/ip/wpa_cli 实战
linux·网络·stm32·物联网·tcp/ip
运维全栈笔记32 分钟前
Nginx 模块化多业务站点通用配置模板
linux·运维·nginx
羑悻的小杀马特1 小时前
从写 YAML 到集群自愈:KES-Operator 把 KES 集群接进 Kubernetes 原生体系
运维·数据库·容器·kubernetes
蓝胖的四次元口袋17 小时前
Docker Compose多容器编排与Nginx集群实战
运维·nginx·docker compose
师傅别念了18 小时前
Nginx 反向代理配置指南,看完这篇就够了
nginx
ITxiaobing20231 天前
IP 库与 AppsFlyer 国家/地区数据不一致时的对账方法
tcp/ip
TechWayfarer1 天前
IP地址查询之后:如何在请求抵达前识别风险
python·tcp/ip·网络安全
Thneonl1 天前
照着 CKS 教材做实验,把 apiserver 干瘫了 7 分钟
安全·kubernetes
名字还没想好☜1 天前
Kubernetes 用 kubectl port-forward 和 proxy 调试集群内服务:两者区别、断连自动重连与为什么别用在生产
运维·docker·kubernetes