负载分布:所有 HTTP 请求都被重定向到 k8 集群中的单个 pod
Load distribution: All HTTP requests are getting redirected to a single pod in a k8 cluster
我创建了一个非常简单的 spring 启动应用程序,只有一个 REST 服务。此应用程序被转换为 docker 图像 ("springdockerimage:1") 并部署在具有 3 个副本的 Kubernetes 集群中。我的“部署”定义内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: springapp
labels:
app: distributiondemo
spec:
selector:
matchLabels:
app: distributiondemo
replicas: 3
template:
metadata:
labels:
app: distributiondemo
spec:
containers:
- name: spring-container
image: springdockerimage:1
我已经为我的上述部署创建了如下服务:
apiVersion: v1
kind: Service
metadata:
name: springservice
labels:
app: distributiondemo
spec:
selector:
app: distributiondemo
ports:
- port: 8080
protocol: TCP
targetPort: 8080
name: spring-port
nodePort: 32000
type: NodePort
部署上述两个 YAML(部署和服务)文件后,我注意到一切都已按预期部署,即创建了 3 个副本,我的服务也有 3 个端点。下面的截图是相同的证明:
由于我使用 minikube 进行本地测试,我正在端口转发并以 kubectl 端口转发部署方式访问应用程序。apps/springapp 40002:8080 .
但我注意到的一件事是我所有的 HTTP 请求都被重定向到一个 pod。
while true ; do curl http://localhost:40002/docker-java-app/test ;done
我不知道我做错了什么。任何帮助,将不胜感激。谢谢。
负载平衡可能不适用于端口转发的端口,因为它可能会直接将流量重定向到 pod(阅读更多内容 )。 K8s 服务是该功能将为您提供负载平衡功能。
因此您可以尝试以下任一方法
- 使用
http://your_service_dns_name:8080/docker-java-app/test
- 使用
http://service_cluster_ip:8080/docker-java-app/test
- 使用
http://any_host_ip_from_k8s_cluster:32000/docker-java-app/test
只有当您从属于 K8s 集群的主机访问这些 url 时,选项 1 和 2 才有效。选项 3 只需要从您正在访问的主机连接到目标主机和端口 url.
我创建了一个非常简单的 spring 启动应用程序,只有一个 REST 服务。此应用程序被转换为 docker 图像 ("springdockerimage:1") 并部署在具有 3 个副本的 Kubernetes 集群中。我的“部署”定义内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: springapp
labels:
app: distributiondemo
spec:
selector:
matchLabels:
app: distributiondemo
replicas: 3
template:
metadata:
labels:
app: distributiondemo
spec:
containers:
- name: spring-container
image: springdockerimage:1
我已经为我的上述部署创建了如下服务:
apiVersion: v1
kind: Service
metadata:
name: springservice
labels:
app: distributiondemo
spec:
selector:
app: distributiondemo
ports:
- port: 8080
protocol: TCP
targetPort: 8080
name: spring-port
nodePort: 32000
type: NodePort
部署上述两个 YAML(部署和服务)文件后,我注意到一切都已按预期部署,即创建了 3 个副本,我的服务也有 3 个端点。下面的截图是相同的证明:
由于我使用 minikube 进行本地测试,我正在端口转发并以 kubectl 端口转发部署方式访问应用程序。apps/springapp 40002:8080 .
但我注意到的一件事是我所有的 HTTP 请求都被重定向到一个 pod。
while true ; do curl http://localhost:40002/docker-java-app/test ;done
我不知道我做错了什么。任何帮助,将不胜感激。谢谢。
负载平衡可能不适用于端口转发的端口,因为它可能会直接将流量重定向到 pod(阅读更多内容
因此您可以尝试以下任一方法
- 使用
http://your_service_dns_name:8080/docker-java-app/test
- 使用
http://service_cluster_ip:8080/docker-java-app/test
- 使用
http://any_host_ip_from_k8s_cluster:32000/docker-java-app/test
只有当您从属于 K8s 集群的主机访问这些 url 时,选项 1 和 2 才有效。选项 3 只需要从您正在访问的主机连接到目标主机和端口 url.