MetalLB 外部 IP 到 Internet
MetalLB External IP to Internet
我无法访问 public MetalLB 负载均衡器分配的 IP
我在 Contabo 中创建了一个 Kubernetes 集群。它的 1 名主人和 2 名工人。每个都有自己的 public IP。
我是用 kubeadm + flannel 做的。后来我确实安装了 MetalLB 来使用负载平衡。
我使用这个清单来安装 nginx:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
有效,pods 是 运行。我在之后看到外部 IP 地址:
kubectl get services
从每个 node/host 我可以卷曲到那个 ip 和端口,我可以获得 nginx 的:
<h1>Welcome to nginx!</h1>
到目前为止,还不错。但是:
我仍然想念的是从我的计算机访问该服务 (nginx)。
我可以尝试通过 IP:PORT 访问每个节点(master + 2 slaves),但没有任何反应。最终目标是拥有一个可以访问该服务的域,但我猜不出我应该使用 IP。
我错过了什么?
MetalLB 应该公开我的 3 个可能的 IP 吗?
我应该在每台服务器上添加其他东西作为反向代理吗?
我在这里问这个问题是因为 baremetal/VPS 上的所有 articles/tutorials(非 aws、GKE 等)都在本地主机上的 kube 上执行此操作而错过了这个基本问题。
谢谢。
你缺少的是路由策略
您的外部 IP 地址必须与节点属于同一网络,或者您可以在默认网关级别添加到外部地址的路由,并为每个地址使用静态 NAT
我有完全相同的硬件布局:
- 一个 3 节点 Kubernetes 集群 - 这里有 3 个 IP:
| 123.223.149.27
| 22.36.211.68
| 192.77.11.164 |
- 运行 在(不同的)VPS-Providers 上(当然连接到 运行 集群(通过 JOIN)
目标:通过 metalLB“公开”nginx,这样我就可以通过浏览器通过我的 VPS'[= 之一的 IP 从集群外部访问我的网络应用程序67=]
问题:我没有 “IP 范围” 我可以为 metallb
申报
完成的步骤:
- 为 Loadbalancer 创建一个 .yaml 文件,kindservicetypeloadbalancer.yaml
- 为ConfigMap创建一个.yaml文件,包含3个节点的IP,kindconfigmap.yaml
``
### start of the kindservicetypeloadbalancer.yaml
### for ensuring a unique name: loadbalancer name nginxloady
apiVersion: v1
kind: Service
metadata:
name: nginxloady
annotations:
metallb.universe.tf/address-pool: production-public-ips
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
type: LoadBalancer
``
下面,要添加到集群的第二个 .yaml 文件:
# start of the kindconfigmap.yaml
## info: the "production-public-ips" can be found
## within the annotations-sector of the kind: Service type: loadbalancer / the kindservicetypeloadbalancer.yaml
## as well... ...namespace: metallb-system & protocol: layer2
## note: as you can see, I added a /32 after every of my node-IPs
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: production-public-ips
protocol: layer2
addresses:
- 123.223.149.27/32
- 22.36.211.68/32
- 192.77.11.164/32
``
添加负载均衡器:
kubectl apply -f kindservicetypeloadbalancer.yaml
添加 ConfigMap:
kubectl apply -f kindconfigmap.yaml
检查命名空间(“n”)metallb-system 的状态:
kubectl describe pods -n metallb-system
PS:
实际上它就在那里:
https://metallb.universe.tf/installation/
这里:
https://metallb.universe.tf/usage/#requesting-specific-ips
我无法访问 public MetalLB 负载均衡器分配的 IP
我在 Contabo 中创建了一个 Kubernetes 集群。它的 1 名主人和 2 名工人。每个都有自己的 public IP。
我是用 kubeadm + flannel 做的。后来我确实安装了 MetalLB 来使用负载平衡。
我使用这个清单来安装 nginx:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1
ports:
- name: http
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 80
selector:
app: nginx
type: LoadBalancer
有效,pods 是 运行。我在之后看到外部 IP 地址:
kubectl get services
<h1>Welcome to nginx!</h1>
到目前为止,还不错。但是:
我仍然想念的是从我的计算机访问该服务 (nginx)。 我可以尝试通过 IP:PORT 访问每个节点(master + 2 slaves),但没有任何反应。最终目标是拥有一个可以访问该服务的域,但我猜不出我应该使用 IP。
我错过了什么?
MetalLB 应该公开我的 3 个可能的 IP 吗? 我应该在每台服务器上添加其他东西作为反向代理吗?
我在这里问这个问题是因为 baremetal/VPS 上的所有 articles/tutorials(非 aws、GKE 等)都在本地主机上的 kube 上执行此操作而错过了这个基本问题。
谢谢。
你缺少的是路由策略
您的外部 IP 地址必须与节点属于同一网络,或者您可以在默认网关级别添加到外部地址的路由,并为每个地址使用静态 NAT
我有完全相同的硬件布局:
- 一个 3 节点 Kubernetes 集群 - 这里有 3 个 IP: | 123.223.149.27 | 22.36.211.68 | 192.77.11.164 |
- 运行 在(不同的)VPS-Providers 上(当然连接到 运行 集群(通过 JOIN)
目标:通过 metalLB“公开”nginx,这样我就可以通过浏览器通过我的 VPS'[= 之一的 IP 从集群外部访问我的网络应用程序67=]
问题:我没有 “IP 范围” 我可以为 metallb
申报完成的步骤:
- 为 Loadbalancer 创建一个 .yaml 文件,kindservicetypeloadbalancer.yaml
- 为ConfigMap创建一个.yaml文件,包含3个节点的IP,kindconfigmap.yaml
``
### start of the kindservicetypeloadbalancer.yaml
### for ensuring a unique name: loadbalancer name nginxloady
apiVersion: v1
kind: Service
metadata:
name: nginxloady
annotations:
metallb.universe.tf/address-pool: production-public-ips
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
type: LoadBalancer
``
下面,要添加到集群的第二个 .yaml 文件:
# start of the kindconfigmap.yaml
## info: the "production-public-ips" can be found
## within the annotations-sector of the kind: Service type: loadbalancer / the kindservicetypeloadbalancer.yaml
## as well... ...namespace: metallb-system & protocol: layer2
## note: as you can see, I added a /32 after every of my node-IPs
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: production-public-ips
protocol: layer2
addresses:
- 123.223.149.27/32
- 22.36.211.68/32
- 192.77.11.164/32
``
添加负载均衡器:
kubectl apply -f kindservicetypeloadbalancer.yaml
添加 ConfigMap:
kubectl apply -f kindconfigmap.yaml
检查命名空间(“n”)metallb-system 的状态:
kubectl describe pods -n metallb-system
PS: 实际上它就在那里: https://metallb.universe.tf/installation/
这里: https://metallb.universe.tf/usage/#requesting-specific-ips