1

我很确定我有一些配置错误或遗漏了一些东西。

我的家庭网络是 10.11.0.0/16

我设置了一个 Kubernetes 实例

sudo kubeadm init --pod-network-cidr=10.166.0.0/16

然后我安装了印花布

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

我使用 NodePort 在https://kubernetes.io/docs/tasks/access-application-cluster/service-access-application-cluster/上使用了教程,它在 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
4

2 回答 2

3

上面的答案确实解决了这个问题,但是该应用程序仍然可以在不常见的 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 中使用它们。

于 2020-11-01T18:46:53.110 回答
2

curl <kubernetes machine IP >:30140如果您使用的是 NodePort 服务,不应该是这样吗?

于 2020-11-01T07:09:50.680 回答