Kubernetes

大使服務保持“待定”

  • May 24, 2021

目前在 Ubuntu Server 20 LTS 上執行全新的“多合一 VM”(堆疊的主/從方法)kubernetes v1.21.1-00,使用

  • cri-o 作為容器執行時介面
  • calico 用於網路/安全

還安裝了 kubernetes-dashboard(但我想這對我的問題並不重要😉)。使用本指南安裝大使:https ://www.getambassador.io/docs/edge-stack/latest/topics/install/yaml-install/我遇到了服務卡在“待定”狀態的問題。

kubectl get svc -n ambassador列印出以下內容

NAME               TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ambassador         LoadBalancer   10.97.117.249    <pending>     80:30925/TCP,443:32259/TCP   5h
ambassador-admin   ClusterIP      10.101.161.169   <none>        8877/TCP,8005/TCP            5h
ambassador-redis   ClusterIP      10.110.32.231    <none>        6379/TCP                     5h
quote              ClusterIP      10.104.150.137   <none>        80/TCP                       5h

雖然將服務中的typefromLoadBalancer更改為NodePort正確設置,但我不確定隨之而來的影響。同樣,我想在這裡使用大使作為入口組件 - 使用我的設置(只有一台機器),可能不需要“真正的”負載平衡。

為了覆蓋所有子域內容,我設置了一個萬用字元記錄以指向我的機器,這意味著我有一個*.k8s.my-domain.com指向該主機的 CNAME。不知道,這種方法對於設置入口是否那麼聰明。

當您更改為時,它會獲取 IP 地址typeNodePort因為它使用節點的 IP 地址。它不能這樣做,LoadBalancer因為您在 VM 上執行 kubernetes 集群並且它沒有任何LoadBalancers可用的。教程是為minikube或云使用者設計的。你可以在這裡看到它:

注意:如果您是 Minikube 使用者,Minikube 本身並不支持負載均衡器。相反,使用 minikube 服務列表

kubeadm我還在我的虛擬機上設置的集群上複製了這個。

kubectl get services -n ambassador

NAME               TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
ambassador         LoadBalancer   10.105.124.148   <pending>       80:30000/TCP,443:31375/TCP   1m15s
ambassador-admin   ClusterIP      10.101.160.245   <none>          8877/TCP,8005/TCP            1m15s
ambassador-redis   ClusterIP      10.110.123.244   <none>          6379/TCP                     1m15s

可以幫助您的最簡單的解決方案之一是使用metal load balancer. 這是專門為裸機集群設計的,為它們提供負載平衡能力。

這是安裝連結metallb

請記住:

安裝清單不包含配置文件。MetalLB 的組件仍將啟動,但在您定義和部署 configmap 之前將保持空閒狀態。

下一部分是設置一個ConfigMap。為此,您需要使用要使用的適當協議創建一個 ConfigMap。我使用了一個簡單的layer 2配置:

metallb-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
 namespace: metallb-system
 name: config
data:
 config: |
   address-pools:
   - name: default
     protocol: layer2
     addresses:
     - 192.168.1.240-192.168.1.250

並將其與kubectl apply -f metallb-configmap.yaml.

我這樣做後,大使服務立即收到了 IP 地址:

NAME               TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
ambassador         LoadBalancer   10.105.124.148   192.168.1.241   80:30000/TCP,443:31375/TCP   4m2s
ambassador-admin   ClusterIP      10.101.160.245   <none>          8877/TCP,8005/TCP            4m2s
ambassador-redis   ClusterIP      10.110.123.244   <none>          6379/TCP                     4m2s

簡單的測試與curl 192.168.1.241作品!

如果您對不起作用有任何疑問ingress,請考慮在不同的問題中提出此問題。查看堆棧社區的最佳實踐

引用自:https://serverfault.com/questions/1064313