gpt4 book ai didi

kubernetes - 如何在裸机集群上从外部访问 Kubernetes 服务

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

我有一个 'ClusterIp' 类型的 api 服务,它工作正常,可以在带有 clusterip 的节点上访问。我想从外部访问它。这是一个使用 kubeadm 的裸机安装。我不能使用负载均衡器或 Nodeport。

如果我也使用 nginx-ingress,我将使用它作为“ClusterIP”,那么如何在 api 服务或 nginx-ingress case 中获取外部可访问的服务。

NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
api ClusterIP 10.97.48.17 <none> 80/TCP 41s
ingress-nginx ClusterIP 10.107.76.178 <none> 80/TCP 3h49m

解决问题的更改:
  • 节点
  • 上的nginx配置

    在/etc/nginx/sites-available
     upstream backend {
    server node1:8001;
    server node2:8001;
    server node3:8001;
    }
    server_name _;

    location / {
    proxy_pass http://backend;
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
    }
  • 将我的两个服务作为 DaemonSet
  • 运行

    最佳答案

    ClusterIP服务只能在集群内访问。

    对于裸机集群,您可以使用以下任何一种方法使服务在外部可用。建议从最推荐到最不推荐的顺序:

  • 使用 metallb 实现负载均衡器 服务类型支持 - https://metallb.universe.tf/ .您将需要一个 IP 地址池供 metallb 分发。它还支持 IP 共享模式,您可以将相同的 IP 用于多个 LoadBalancer 服务。
  • 使用节点端口 服务。您可以从任何节点 IP:node_port 地址访问您的服务。 NodePort 服务默认选择节点端口范围内的随机端口。您可以使用 spec.ports.nodePort 在节点端口范围内选择自定义端口服务规范中的字段。

    缺点:默认节点端口范围为30000-32767。因此,您无法绑定(bind)到任何您想要的自定义端口,例如 8080。尽管您可以使用 --service-node-port-range 更改节点端口范围。 kube-api-server 的标志,不建议在低端口范围内使用。
  • 使用主机端口 绑定(bind)节点上的端口。

    缺点:你没有固定的 IP 地址,因为你不知道你的 pod 被调度到哪个节点,除非你使用 nodeAffinity .如果您希望它可以从给定端口上的所有节点访问,您可以将您的 pod 设置为守护程序集。

  • 如果您正在处理 HTTP 流量,另一种选择是安装 IngressController像 nginx 或 Traefik 并使用 Ingress资源。作为安装的一部分,他们使用上述方法之一使自己在外部可用。

    关于kubernetes - 如何在裸机集群上从外部访问 Kubernetes 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59628796/

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