AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-933469

ReaperClown's questions

Martin Hope
ReaperClown
Asked: 2021-11-17 03:13:44 +0800 CST

从本地网络外部访问集群中的 Kubernetes 服务 - 裸机

  • 1

我正在运行一个简单的裸机多主机“高可用性”环境,其中包含 2 个主机和 2 个工作人员,以及另一个使用 HAProxy 作为外部负载均衡器的 VM。

我的问题是:可以从集群外部访问服务(仪表板、ngnix、mysql(尤其是 mysql)等...),使用我正在运行的这个设置将它们暴露给网络?

我曾尝试在此环境中使用 MetalLB 将服务公开为 LoadBalancer,但它似乎不起作用,而且由于我对 Kubernetes 有点陌生,我不知道为什么。

编辑:现在开始工作了,遵循@c4f4t0r 的建议,而不是外部 HAProxy 负载均衡器,同一个 VM 成为第三个主节点,以及其他主节点,它们现在每个运行一个 HAProxy 和 Keepalived 的内部实例,而曾经作为外部 LB 的 VM 现在是其他节点加入集群的端点主机,MetalLB 在集群内运行,nginx 入口控制器将请求引导到已请求的服务。



>>> 以下是我创建环境以及设置中使用的所有配置所遵循的步骤。



使用 kubeadm 设置高可用 Kubernetes 集群

按照本文档使用Ubuntu 20.04 LTS设置高可用性 Kubernetes 集群。

本文档指导您使用 HAProxy 设置具有两个主节点、一个工作节点和一个负载平衡器节点的集群。

裸机环境

角色 全域名 知识产权 操作系统 内存 中央处理器
负载均衡器 loadbalancer.example.com 192.168.44.100 Ubuntu 21.04 1G 1
掌握 kmaster1.example.com 10.84.44.51 Ubuntu 21.04 2G 2
掌握 kmaster2.example.com 192.168.44.50 Ubuntu 21.04 2G 2
工人 kworker1.example.com 10.84.44.50 Ubuntu 21.04 2G 2
工人 kworker2.example.com 192.168.44.51 Ubuntu 21.04 2G 2
  • 所有这些虚拟机上的root帐户的密码都是kubeadmin
  • 除非另有说明,否则以 root 用户身份执行所有命令

先决条件

如果您想在工作站上的虚拟化环境中尝试此操作

  • 安装了虚拟机
  • 主机至少有 8 个内核
  • 主机至少8G内存

设置负载均衡器节点

安装 Haproxy
apt update && apt install -y haproxy
配置 haproxy

将以下行附加到/etc/haproxy/haproxy.cfg

frontend kubernetes-frontend
    bind 192.168.44.100:6443
    mode tcp
    option tcplog
    default_backend kubernetes-backend

backend kubernetes-backend
    mode tcp
    option tcp-check
    balance roundrobin
    server kmaster1 10.84.44.51:6443 check fall 3 rise 2
    server kmaster2 192.168.44.50:6443 check fall 3 rise 2
重启haproxy服务
systemctl restart haproxy

在所有 Kubernetes 节点上(kmaster1、kmaster2、kworker1)

禁用防火墙
ufw disable
禁用交换
swapoff -a; sed -i '/swap/d' /etc/fstab
更新 Kubernetes 网络的 sysctl 设置
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安装 docker 引擎
{
  apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
  add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  apt update && apt install -y docker-ce containerd.io
}

Kubernetes 设置

添加 Apt 存储库
{
  curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
  echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
}
安装 Kubernetes 组件
apt update && apt install -y kubeadm=1.19.2-00 kubelet=1.19.2-00 kubectl=1.19.2-00

在任何一个 Kubernetes 主节点上(例如:kmaster1)

初始化 Kubernetes 集群
kubeadm init --control-plane-endpoint="192.168.44.100:6443" --upload-certs

复制命令以加入其他主节点和工作节点。

部署印花布网络(我使用 Wea​​ve 而不是 Calico)
kubectl --kubeconfig=/etc/kubernetes/admin.conf create -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml

将其他节点加入集群(kmaster2 & kworker1)

使用您从第一个 master 上的 kubeadm init 命令的输出中复制的相应 kubeadm join 命令。

重要提示:当您加入另一个主节点时,您还需要将 --apiserver-advertise-address 传递给 join 命令。

load-balancing cluster kubernetes haproxy bare-metal
  • 1 个回答
  • 213 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve