- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经使用以下方法在 k3s 集群中设置了一项服务:
apiVersion: v1
kind: Service
metadata:
name: myservice
namespace: mynamespace
labels:
app: myapp
spec:
type: LoadBalancer
selector:
app: myapp
ports:
- port: 9012
targetPort: 9011
protocol: TCP
kubectl get svc -n mynamespace
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
minio ClusterIP None <none> 9011/TCP 42m
minio-service LoadBalancer 10.32.178.112 192.168.40.74,192.168.40.88,192.168.40.170 9012:32296/TCP 42m
kubectl describe svc myservice -n mynamespace
Name: myservice
Namespace: mynamespace
Labels: app=myapp
Annotations: <none>
Selector: app=myapp
Type: LoadBalancer
IP Family Policy: SingleStack
IP Families: IPv4
IP: 10.32.178.112
IPs: 10.32.178.112
LoadBalancer Ingress: 192.168.40.74, 192.168.40.88, 192.168.40.170
Port: <unset> 9012/TCP
TargetPort: 9011/TCP
NodePort: <unset> 32296/TCP
Endpoints: 10.42.10.43:9011,10.42.10.44:9011
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
我从上面假设我可以从以下位置访问 minIO 控制台: http://192.168.40.74:9012但这是不可能的。
错误信息:
curl: (7) Failed to connect to 192.168.40.74 port 9012: Connectiontimed out
此外,如果我执行
kubectl get node -o wide -n mynamespace
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
antonis-dell Ready control-plane,master 6d v1.21.2+k3s1 192.168.40.74 <none> Ubuntu 18.04.1 LTS 4.15.0-147-generic containerd://1.4.4-k3s2
knodeb Ready worker 5d23h v1.21.2+k3s1 192.168.40.88 <none> Raspbian GNU/Linux 10 (buster) 5.4.51-v7l+ containerd://1.4.4-k3s2
knodea Ready worker 5d23h v1.21.2+k3s1 192.168.40.170 <none> Raspbian GNU/Linux 10 (buster) 5.10.17-v7l+ containerd://1.4.4-k3s2
如上所示,节点的内部 IP 与负载均衡器的外部 IP 相同。我在这里做错了什么吗?
最佳答案
为了重现环境,我按照后续步骤创建了一个双节点 k3s
集群:
在所需主机上安装 k3s 控制平面:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='--write-kubeconfig-mode=644' sh -
验证它是否有效:
k8s kubectl get nodes -o wide
要添加工作节点,应在工作节点上运行此命令:
curl -sfL https://get.k3s.io | K3S_URL=https://control-plane:6443 K3S_TOKEN=mynodetoken sh -
其中 K3S_URL
是一个控制平面 URL(带有 IP 或 DNS)
K3S_TOKEN
可以通过以下方式获取:
sudo cat /var/lib/rancher/k3s/server/node-token
您应该有一个正在运行的集群:
$ k3s kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3s-cluster Ready control-plane,master 27m v1.21.2+k3s1 10.186.0.17 <none> Ubuntu 18.04.5 LTS 5.4.0-1046-gcp containerd://1.4.4-k3s2
k3s-worker-1 Ready <none> 18m v1.21.2+k3s1 10.186.0.18 <none> Ubuntu 18.04.5 LTS 5.4.0-1046-gcp containerd://1.4.4-k3s2
我创建了一个基于 nginx
图像的简单部署:
$ k3s kubectl create deploy nginx --image=nginx
并暴露它:
$ k3s kubectl expose deploy nginx --type=LoadBalancer --port=8080 --target-port=80
这意味着 pod 中的 nginx
容器正在监听端口 80
并且 service
可以在端口 8080
上访问集群内:
$ k3s kubectl get svc -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 29m <none>
nginx LoadBalancer 10.43.169.6 10.186.0.17,10.186.0.18 8080:31762/TCP 25m app=nginx
服务可通过 IP 或 localhost
以及端口 8080
或 NodePort
访问。
+ 考虑到你得到的错误 curl: (7) Failed to connect to 192.168.40.74 port 9012: Connection timed out
表示服务已配置,但是它没有正确响应(不是来自入口的 404 或 connection refused
)。
来自 rancher k3s official documentation about LoadBalancer , Klipper Load Balancer用来。来自他们的 github 仓库:
This is the runtime image for the integrated service load balancer inklipper. This works by using a host port for each service loadbalancer and setting up iptables to forward the request to the clusterIP.
来自 how the service loadbalancer works :
K3s creates a controller that creates a Pod for the service loadbalancer, which is a Kubernetes object of kind Service.
For each service load balancer, a DaemonSet is created. The DaemonSetcreates a pod with the svc prefix on each node.
The Service LB controller listens for other Kubernetes Services. Afterit finds a Service, it creates a proxy Pod for the service using aDaemonSet on all of the nodes. This Pod becomes a proxy to the otherService, so that for example, requests coming to port 8000 on a nodecould be routed to your workload on port 8888.
If the Service LB runs on a node that has an external IP, it uses theexternal IP.
换句话说,是的,预计负载均衡器具有与主机的 internal-IP
相同的 IP 地址。 k3s 集群中每个具有负载均衡器类型的服务都将在每个节点上拥有自己的 daemonSet
来为初始服务提供直接流量。
例如我创建了第二个部署 nginx-two
并将其暴露在端口 8090
上,您可以看到有两个来自两个不同部署的 pod 和四个充当负载均衡器的 pod(请注意名称 - svclb
开头):
$ k3s kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-6799fc88d8-7m4v4 1/1 Running 0 47m 10.42.0.9 k3s-cluster <none> <none>
svclb-nginx-jc4rz 1/1 Running 0 45m 10.42.0.10 k3s-cluster <none> <none>
svclb-nginx-qqmvk 1/1 Running 0 39m 10.42.1.3 k3s-worker-1 <none> <none>
nginx-two-6fb6885597-8bv2w 1/1 Running 0 38s 10.42.1.4 k3s-worker-1 <none> <none>
svclb-nginx-two-rm594 1/1 Running 0 2s 10.42.0.11 k3s-cluster <none> <none>
svclb-nginx-two-hbdc7 1/1 Running 0 2s 10.42.1.5 k3s-worker-1 <none> <none>
两种服务都有相同的EXTERNAL-IP
:
$ k3s kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx LoadBalancer 10.43.169.6 10.186.0.17,10.186.0.18 8080:31762/TCP 50m
nginx-two LoadBalancer 10.43.118.82 10.186.0.17,10.186.0.18 8090:31780/TCP 4m44s
关于kubernetes - Load Balancer External IP 与 K3s 集群节点的 Internal IP 相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68378269/
我是 AWS 新手。我开始学习 ALB 和 NLB。我知道 ALB 在第 7 层协议(protocol)中工作,而 NLB 在第 4 层协议(protocol)中工作。 谁能解释一下ALB和NLB的实
我正在使用平衡付款ruby api并意外创建了几个额外的测试市场。虽然 api 公开了一个用于创建测试市场的清晰界面,但我似乎找不到任何方法来删除它,即使没有 api。有人知道删除市场的方法吗? 最佳
我有在 Google Compute Engine 上运行的服务。我在欧洲的目标池中有几个实例,在美国的目标池中也有几个实例。目前我有一个域名,它连接到欧洲目标池 IP,并且可以很好地在这两个实例之间
我在golang中遇到以下错误 # go.etcd.io/etcd/clientv3/balancer/picker
我在 Google CE(计算引擎)上有一个 Node.js 应用程序,它在 nginx 服务器后面运行。 我应该使用 nginx 负载均衡器和 Google Cloud 负载均衡器吗? 或者它们是相
我正在寻找将 WAF 集成到现有服务器设置中的方法,因为我的 Classic Load Balancer(带有 EC2 实例)不支持 WAF,因此我需要迁移到 Application Load Bal
在我的文档中有一个父 div固定高度和两列子元素 div . Text 仅使用 CSS3,我试图通过以下方式将子项的两列布局与父项的溢出裁剪携手合作: 当子元素包含很少的文本时,它不应该平
我正在尝试设置 Application Load Balancer 以将流量转发到 AWS 中的 Nginx Ingress Controller 。 为了设置 Nginx Ingress Contr
我有一个 EKS Kubernetes 1.16.x。具有三个标记为 kubernetes.io/role/elb: 1 的公共(public)子网的集群和三个标记为 kubernetes.io/ro
我有 REST API。 为了简单起见,假设我有两个服务: read.request.com write.request.com 如何将所有读取请求(GET 方法)重写为read.request.co
我是微服务领域的新手,但了解有关负载平衡的基础知识。我最近读了一篇关于微服务的文章:Enough with the microservices . 其中提到微服务和负载均衡器都有集群/不同的 VM 用
在阅读“kong”api网关的文档时,上游服务器中有一个称为插槽的概念。我没明白这句话的意思。请分享这方面的知识。 最佳答案 我查看了 Kong 源代码,这是相对于外部 resty 库的: https
某个组织有10服务器。为它提供一些负载平衡算法。还要考虑这样一种情况,其中一台服务器需要 10 秒来处理请求,而其他服务器只需要 1 秒。那么,您将如何管理这个瓶颈? 最佳答案 有多种方法可以做到这一
考虑一种情况,我们有一个部署在多个服务器中的 Web 应用程序,并且客户端请求登陆到负载均衡器,负载均衡器又将请求路由到实际服务器。 现在,如果我们有太多请求并发,负载均衡器本身会失败吗?假设我们每秒
在Web应用程序和服务中,我正在创建它必须水平缩放。我想拥有1个负载平衡器,3个Web服务器节点和2个数据库节点(其中一个仅用于冗余,并且在第一个数据库节点发生故障时将垂直扩展)。 负载均衡器是否充当
可以对MQTT代理进行负载平衡吗?我可以使用ELB来负载均衡MQTT吗?朝这个方向的任何指示都将有所帮助。我碰到了http://www.slideshare.net/kellogh/mqtt-kafk
阅读常见消息队列系统(例如 RabbitMQ、ActiveMQ)的文档,似乎负载平衡总是由队列系统(循环)或生产者使用消息上的多个队列或属性来完成。然而,在我们的应用程序中,没有人知道处理消息需要多长
我的老板想要一个系统来考虑整个大陆的灾难性事件。他想在美国有两台服务器,在亚洲有两台服务器(每个大陆有 1 个登录服务器和 1 个工作服务器)。 如果地震破坏了两大洲之间的联系,两者都应该单独行动。当
最近有几种服务发现工具变得流行/“主流”,我想知道在哪些主要用例下应该使用它们而不是传统的负载均衡器。 使用 LB,您可以在平衡器后面聚集一堆节点,然后客户端向平衡器发出请求,然后平衡器(通常)将这些
我们的设置是 Varnish 前端,通过配置的运行状况轮询为2个后端提供服务。我们使用Client Director进行负载平衡,因此根据client.identity选择后端 当两个后端之一发生故障
我是一名优秀的程序员,十分优秀!