因为docker支持开箱即用的kubernetes(在我的Mac上),所以我想尝试一下,看看是否可以对一个简单的Web服务进行负载均衡。为此,我创建了一个简单的映像,该映像公开了端口3000,并且仅返回Hello World
。我创建了一个k8s配置yaml
apiVersion: v1
kind: Service
metadata:
name: hello-kubernetes
spec:
type: NodePort
externalIPs:
- 192.168.2.85
ports:
- port: 8080
targetPort: 3000
selector:
app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-kubernetes
spec:
replicas: 3
selector:
matchLabels:
app: hello-kubernetes
template:
metadata:
labels:
app: hello-kubernetes
spec:
containers:
- name: hello-kubernetes
image: hello/world:latest
ports:
- containerPort: 3000
应用
$> kubectl apply -f ./example.yaml
我看到3个吊舱正在运行,并且有服务
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-kubernetes NodePort 10.99.38.46 192.168.2.85 8080:30244/TCP 42m
我在上面使用了NodePort,但不确定是否也可以在这里使用Loadbalancer
。
无论如何,当我进入This site can’t be reached
或`http://192.168.2.85:30244(我不知道要使用哪个端口)时,在浏览器中都会收到消息http://192.168.2.85:8080
。
所以,我想我已经接近了,但是我仍然错过了一些事情:(任何帮助将不胜感激!
答案 0 :(得分:1)
答案 1 :(得分:1)
k explain service.spec.externalIPs
种类:服务版本:v1
字段:外部IP <[]字符串>
说明: externalIPs是群集中节点将为其提供IP地址的列表 也接受此服务的流量。这些IP不受管理 Kubernetes。用户有责任确保流量到达 此IP的节点。一个常见的例子是外部负载均衡器 Kubernetes系统的一部分。
问题出在这里,我们不知道您的网络设置。这是Mac的minikube吗? 192.168.2.x网络适合您吗?在使用minikube的情况下,我要做的就是编辑externalIP以使其可以从我的网络访问。所以我要做的就是:
minikube IP
在我的情况下为192.168.99.100(minikubeVM的IP地址)将外部IP更改为192.168.99.100
k get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-kubernetes NodePort 10.105.212.118 192.168.99.100 8080:32298/TCP 46m
我能够使用192.168.99.100:8080
访问该应用程序。
还要注意,在您的情况下,您具有8081端口(但是我想P Ekambaram已经提到了这一点)。