从远程主机访问Kubernetes

问题描述

我很确定我配置错误或缺少某些东西。

我的家庭网络是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

然后我用以下方法设置MetalLB

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吗?