gpt4 book ai didi

kubernetes - MetalLB 外部 IP 到 Internet

转载 作者:行者123 更新时间:2023-12-02 11:32:12 32 4
gpt4 key购买 nike

我无法访问 MetalLB 负载均衡器分配的公共(public) IP

我在 Contabo 中创建了一个 Kubernetes 集群。它的1个主人和2个 worker 。每个人都有自己的公共(public) IP。

我用 kubeadm + flannel 做到了。后来我确实安装了 MetalLB 来使用负载平衡。

我使用这个 list 来安装 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

它有效, pod 正在运行。我在之后看到了外部 IP 地址:
kubectl get services

enter image description here
从每个节点/主机我可以curl到那个ip和端口,我可以得到nginx的:
<h1>Welcome to nginx!</h1>

到现在为止还挺好。但:

我仍然想念的是从我的计算机访问该服务(nginx)。
我可以尝试通过 IP:PORT 访问每个节点(主节点 + 2 个从节点),但没有任何 react 。最终目标是拥有一个可以访问该服务的域,但我猜不出我应该使用女巫 IP。

我错过了什么?

MetalLB 是否应该公开我的 3 个可能的 IP?
我应该在每台服务器上添加其他东西作为反向代理吗?

我在这里问这个问题是因为所有关于裸机/VPS(非 aws、GKE 等)的文章/教程都在本地主机上的 kube 上执行此操作而错过了这个基本问题。

谢谢。

最佳答案

我的硬件布局完全相同:

  • 一个 3 节点 Kubernetes 集群 - 这里有 3 个 IP:
    | 123.223.149.27
    | 22.36.211.68
    | 192.77.11.164 |
  • 在(不同的)VPS-Providers 上运行(连接到正在运行的集群(通过 JOIN),当然)

  • 目标:通过metalLB“公开”nginx,因此我可以通过浏览器通过我的VPS'之一的IP从集群外部访问我的网络应用程序
    问题:我没有可以为 metallb 声明的“IP 范围”
    完成的步骤:
  • 为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
    ``
  • 添加LoadBalancer: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

    关于kubernetes - MetalLB 外部 IP 到 Internet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57099703/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com