首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用MetalLB公开Kubernetes集群

用MetalLB公开Kubernetes集群
EN

Stack Overflow用户
提问于 2020-01-13 11:48:12
回答 1查看 883关注 0票数 0

我有一个由一个主节点和两个工作人员组成的裸金属集群。主节点有2个网络接口。其中一个网络接口有一个分配给它的PUBLIC_IP。

通过主节点中的第二网络接口连接所述节点。详情如下:

代码语言:javascript
复制
kubeadm init --apiserver-advertise-address INTERNAL_MASTER_IP

然后,工人们按以下方式加入:

代码语言:javascript
复制
kubeadm join INTERNAL_MASTER_IP:6443 --token TOKEN --discovery-token-ca-cert-hash sha256:CERT

我安装了如下编织:

代码语言:javascript
复制
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

到目前为止,一切都很顺利,政府如下:

代码语言:javascript
复制
kubectl get nodes -o wide
NAME    STATUS   ROLES    AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
node0   Ready    master   3h44m   v1.17.0   PUBLIC_IP       <none>        Ubuntu 18.04.3 LTS   4.15.0-72-generic   docker://18.6.2
node1   Ready    <none>   3h40m   v1.17.0   10.6.129.228    <none>        Ubuntu 18.04.3 LTS   4.15.0-72-generic   docker://18.6.2
node2   Ready    <none>   3h40m   v1.17.0   10.6.129.47     <none>        Ubuntu 18.04.3 LTS   4.15.0-72-generic   docker://18.6.2

我正在尝试通过PUBLIC_IP公开服务。为此,我按以下方式安装了MetalLB:

代码语言:javascript
复制
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml

ConfigMap如下:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - PUBLIC_IP

NGINX的部署如下:

代码语言:javascript
复制
kubectl run nginx --image=nginx --port=80
kubectl expose deployment nginx --type=LoadBalancer --name=nginx-service

然而,结果如下:

代码语言:javascript
复制
kubectl get deployments
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           31m


kubectl get services
NAME            TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes      ClusterIP      10.96.0.1      <none>        443/TCP        3h50m
nginx-service   LoadBalancer   10.96.114.88   <pending>     80:31246/TCP   31m


kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-5578584966-vkgvv   1/1     Running   0          32m`enter code here`


kubectl describe service nginx-service
Name:                     nginx-service
Namespace:                default
Labels:                   run=nginx
Annotations:              <none>
Selector:                 run=nginx
Type:                     LoadBalancer
IP:                       10.96.114.88
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31246/TCP
Endpoints:                10.36.0.0:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

可以看到,外部IP仍然是pending。你有什么主意吗?(预先谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-13 12:04:52

您需要在metallb配置中提供IP地址范围。您给metallb的IP也应该是虚拟IP。不应该已经有使用IP的端点了。

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - PUBLIC_IP-PUBLIC_IP      ## This line
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59716077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档