我想将所有节点上的服务绑定到端口 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
您有两个选择:
- 简单的端口转发
- 外部IP
- 保持活动状态
简单的端口转发
在所有服务器上运行以下命令
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 来实现此目的,因为它更适合我的网络模型,但如果您的客户端可以访问您的任何服务器,那么简单的端口转发是唯一的方法。