我用Terraform创建了一个AKS集群。我希望集群具有LoadBalancer和静态公共IP,并且希望它们预先存在于我的Ingress Controller / LoadBalancer服务定义中,因为我不希望Kubernetes清单动态创建/删除它们。 / p>
因此,根据documentation recommendations,我还根据Terraform在节点资源组中使用SKU basic在节点资源组中创建了LoadBalancer和静态公共IP,并将公共IP附加到LB。
然后,我创建了一个类型为LoadBalancer的服务:
---
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: LoadBalancer
loadBalancerIP: 8.8.8.8 (the public static IP allocated by Terraform)
selector:
name: my-pods-selector
ports:
- name: my-port
protocol: TCP
port: 1234
targetPort: 1234
服务然后停留在PENDING状态,并且describe
告诉我:
$ kubectl describe svc my-service
[...]
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 5s (x9 over 15m) service-controller Ensuring load balancer
Warning CreatingLoadBalancerFailed 4s (x9 over 15m) service-controller Error creating load balancer (will retry): failed to ensure load balancer for service my-service: timed out waiting for the condition
我无法在describe
命令输出中找到有关该错误的更多信息:
Error creating load balancer (will retry): failed to ensure load balancer for service my-service: timed out waiting for the condition
此外,如果不是预先创建LoadBalancer,而是仅创建公共IP,则会动态创建LoadBalancer,一切都会顺利进行。
问题是:如何成功使Azure(我缺少哪个配置参数?)使用预先存在的LB?
答案 0 :(得分:1)
我希望集群具有LoadBalancer和静态公共IP,并且 我希望这些对象预先存在于我的Ingress Controller中/ LoadBalancer服务定义,因为我不希望这样 由Kubernetes清单动态创建/删除。
不幸的是,您不能将具有静态公共IP的预先存在的Load Balancer用于AKS群集中的服务。您可以在Github中查看相同的issue。如建议所示:
您需要让AKS在Azure中为以下对象创建负载均衡器资源 您的服务,而不是尝试在它们之前手动创建它们 然后在AKS中使用它们。只需通过创建服务即可 Kubernetes API,并让网络插件创建和配置 适当的Azure资源。
我建议您可以使用静态分配方法自己创建公共IP。然后使用Load Balancer类型和静态公共IP创建服务。
答案 1 :(得分:0)
使用--sku Standard创建静态IP。如果没有--sku,则使用SKU Basic创建标准IP。
基本静态IP不能用于负载均衡器。 查看活动日志,您会看到如下警告:
标准sku负载均衡器 /subscriptions/55aa..../resourceGroups/MC_kubernetes-dev-kubernetes-dev-cluster_northeurope/providers/Microsoft.Network/loadBalancers/kubernetes 无法引用基本sku publicIP / subscriptions / 55aa .... / resourceGroups / MC_kubernetes-dev_kubernetes-dev-cluster_northeurope / providers / Microsoft.Network / publicIPAddresses / kubernetes-dev-public-ip。
STATICIP=$(az network public-ip create --resource-group <MC_your-RG> --name Your-public-ip-name --sku Standard --allocation-method static --query publicIp.ipAddress -o tsv)
现在将此IP分配给您的负载均衡器服务