问题描述
我很确定我配置错误或缺少某些东西。
我的家庭网络是10.11.0.0/16
我使用以下方法设置了kubernetes实例
sudo kubeadm init --pod-network-cidr=10.166.0.0/16
然后我用以下工具安装了calico
CALICO_IPV4POOL_CIDR=10.166.32.0/20
apiVersion: v1
kind: ConfigMap
Metadata:
namespace: Metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.100.1-192.168.100.254
我在https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/上使用NodePort使用了该教程,它在kubernetes机器上运行良好:
kubectl describe services example-service
Name: example-service
Namespace: default
Labels: app.kubernetes.io/name=load-balancer-example
Annotations: <none>
Selector: app.kubernetes.io/name=load-balancer-example
Type: NodePort
IP: 10.110.245.152
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30140/TCP
Endpoints: 10.166.32.243:8080,10.166.32.244:8080,10.166.32.245:8080 + 2 more...
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
我可以通过以下方式访问kubernetes机器上的Pod
curl http://10.110.245.152:8080
Hello Kubernetes!
如何启用我的家庭网络上的其他计算机?当我在其他计算机上尝试此操作时,它会挂起...
curl http://10.110.245.152:8080
解决方法
上面的答案确实解决了问题,但是该应用程序仍然可以在非常见的kubernetes分配端口上运行。我想这个想法是让kubernetes集群在单个IP和标准端口上可见。
MetalLb设置可以提供裸机负载平衡器或“ LoadBalancer”服务类型,默认情况下kubernetes不提供。
上面的示例使用“ NodePort”类型,并且在服务配置中,您应该能够将“ NodePort”替换为“ LoadBalancer”类型。如果配置正确,则kubectl get service example-service
应该同时显示来自内部kube网络的地址和来自已配置的MetalLb范围的外部IP地址。如下例所示:
kube-server:~$ kubectl get service keycloak-db -n keycloak-db
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
keycloak-db LoadBalancer 10.109.91.158 192.168.1.243 8080:32434/TCP 33d
我在示例中注意到的另一件事是MetalLb配置(192.168.100.0/24)中分配的地址范围与您的家庭网络(10.11.0.0/16)不匹配。如果没有适当的路由,最好在家庭网络中保留一些IP并在MetalLb中使用它们。
,如果您正在使用NodePort服务,应该是curl <kubernetes machine IP >:30140
吗?