简单的端口转发

简单的端口转发

我想将所有节点上的服务绑定到端口 80 和 443,这样我将通过 DNS 名称 (kubernetes) 重定向到任何节点,该节点通过 HTTP/S 将我直接重定向到服务,然后重定向到部署 (nginx )。但是,我不知道这是如何工作的,因为 NodePort 的范围仅从 30000 到 32xxx。

这是我的设置

DNS-Name      IPv4
k8s-master    172.25.35.47
k8s-node-01   172.25.36.47
k8s-node-02   172.25.36.8
kubernetes    172.25.36.47
kubernetes    172.25.36.8

我的 yaml 文件

apiVersion: v1
kind: Service
metadata:
  name: proxy
spec:
  ports:
  - name: http
    nodePort: 80     
    port: 80            
    protocol: TCP      
    targetPort: 80     
  - name: https
    nodePort: 443     
    port: 443           
    protocol: TCP       
    targetPort: 443     
  selector:
    name: proxy
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: proxy
  labels:
    name: proxy
spec:
  selector:
    matchLabels:
      name: proxy
  replicas: 1
  template:
    metadata:
     labels:
       name: proxy
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - name: http
          containerPort: 80
          protocol: TCP
        - name: https
          containerPort: 443
          protocol: TCP

哪种类型的服务为我提供了公开此端口的功能,或者我如何实现我的心理设置?

沃尔克

答案1

您有两个选择:

  1. 简单的端口转发
  2. 外部IP
  3. 保持活动状态

简单的端口转发

在所有服务器上运行以下命令

sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports <nodeport>
sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports <nodeport>

替换<nodeport>为您为 nodeport 选择的端口。这需要您在所有机器上运行命令,这有点麻烦。更好的解决方案是:

外部IP

链接到文档

这允许您绑定特定节点上的任何端口,然后该端口将通过集群进行路由。显然,这确实提供了单点故障,可以通过以下方式修复:

保持活动状态

keepalived 是一个非常简单的软件。它创建一个虚拟 IP 地址,当主节点发生故障时,该地址会被移动到指向不同的节点。它有效地为主 keepalived 服务器创建一个别名 IP 地址。一个好的开始将是keepalived VIP,它会自动为您提供的服务设置 keepalived。

结论

我个人使用 keepalived-vip 来实现此目的,因为它更适合我的网络模型,但如果您的客户端可以访问您的任何服务器,那么简单的端口转发是唯一的方法。

相关内容