在AWS上使用k8s将静态IP分配给LoadBalancer服务

333*_*hin 7 amazon-ec2 kubernetes

目标:在AWS上创建一个k8s LoadBalancer服务,其IP为静态

我没有问题,可以通过预先分配一个静态IP并通过loadBalancerIP属性将其传递给GKE来完成此操作:

$ kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
  name: dave
loadBalancerIP: 17.18.19.20
...etc...
Run Code Online (Sandbox Code Playgroud)

但是在AWS中执行相同操作会导致externalIP停留<pending>在状态以及Events历史记录中的错误

删除该loadBalancerIP值可使k8s旋转经典LB:

$ kubectl describe svc dave
Type:                   LoadBalancer
IP:                     100.66.51.123
LoadBalancer Ingress:   ade4d764eb6d511e7b27a06dfab75bc7-1387147973.us-west-2.elb.amazonaws.com
...etc...
Run Code Online (Sandbox Code Playgroud)

但是AWS明确警告我IP是短暂的(有时是2),而Classic IP似乎不支持附加静态IP

谢谢你的时间

333*_*hin 0

正如 @Quentin 所指出的,AWS 网络负载均衡器现在支持 K8s

https://aws.amazon.com/blogs/opensource/network-load-balancer-support-in-kubernetes-1-9/

Kubernetes 中的网络负载均衡

在 Kubernetes 1.9 版本中,我添加了对将新网络负载均衡器与 Kubernetes 服务结合使用的支持。这是一个 alpha 级别的功能,截至目前尚未准备好用于生产集群或工作负载,因此请确保在尝试之前阅读有关 NLB 的文档。通过 NLB 公开服务的唯一要求是添加带有 nlb 值的注释 service.beta.kubernetes.io/aws-load-balancer-type。

完整的示例如下所示:

apiVersion: v1
kind: Service
metadata:
  name: nginx
  namespace: default
  labels:
    app: nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)

  • 这个答案解决了如何通过 K8S 动态创建 NLB,但据我所知,它还不会自动使用弹性 IP。这可能会在 K8S 1.16 中提供。请参阅 https://github.com/kubernetes/kubernetes/pull/69263 (2认同)