[英]LoadBalancer external-ip stuck in pending
我已經使用 kubeadm 創建了一個帶有 AWS ec2 實例的 Kubernetes 集群,但是當我嘗試使用 LoadBalancer 類型創建服務時,我得到一個 EXTERNAL-IP 掛起狀態
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 123m
nginx LoadBalancer 10.107.199.170 <pending> 8080:31579/TCP 45m52s
我的創建命令是
kubectl expose deployment nginx --port 8080 --target-port 80 --type=LoadBalancer
我不確定我做錯了什么。
我希望看到的是為負載均衡器提供的外部 IP 地址。
請問有人遇到過這個問題並成功解決嗎?
謝謝。
您需要設置 k8s 和 AWS 之間的接口,即ws-cloud-provider-controller 。
apiVersion: kubeadm.k8s.io/v1beta1
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
cloud-provider: aws
可以找到更多詳細信息:
完成此設置后,您不僅可以控制為每個具有 LoadBalancer. 類型的 k8s 服務創建 AWS LB。而且,您還可以使用annotations控制許多事情。
apiVersion: v1
kind: Service
metadata:
name: example
namespace: kube-system
labels:
run: example
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xx-xxxx-x:xxxxxxxxx:xxxxxxx/xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx #replace this value
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
type: LoadBalancer
ports:
- port: 443
targetPort: 5556
protocol: TCP
selector:
app: example
要使用 EC2 在 AWS 上創建 K8s 集群,您需要考慮一些配置以使其按預期工作。 這就是為什么您的服務沒有與外部 IP 一起公開的原因。
you need to get the public IP of the EC2 instance that your cluster used it to deploy Nginx pod on it and then edit Nginx service to add external IP
kubectl edit service nginx
這將提示終端添加外部 IP:
type: LoadBalancer
externalIPs:
- 1.2.3.4
其中 1.2.3.4 是 EC2 實例的公共 IP。 然后確保您的端口允許您的安全組入站流量(31579)
現在您可以從任何打開的瀏覽器中使用 k8s 服務:1.2.3.4:31579
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.