首页 文章

Kubernetes 1.0.1使用CoreOS的GCE上的外部负载均衡器

提问于
浏览
0

使用以前版本的Kubernetes(0.16.x),我能够在GCE上创建一个基于CoreOS的VM集群,能够为服务生成外部网络负载 balancer 器 . 随着Kubernetes v1的发布,此功能所需的配置似乎已经改变 . 任何人都可以提供任何建议或指出我可能会帮助我解决这个问题的一些文档的方向吗?

我怀疑问题与ip /命名有关,因为我之前使用kube-register来处理这个问题,而且这个组件似乎不再需要了 . 我当前的配置将创建内部服务负载 balancer 器而不会出现问题,甚至会创建外部服务负载 balancer 器,但它们只能通过gcloud UI查看,并且未在kubectl输出中注册或显示 . 不幸的是,生成的外部ips实际上并没有通过任何一个来代理流量 .

kube-controller-manager服务日志如下所示:

Aug 05 12:15:42 europe-west1-b-k8s-master.c.staging-infrastructure.internal hyperkube[1604]: I0805 12:15:42.516360    1604 gce.go:515] Firewall doesn't exist, moving on to deleting target pool.
Aug 05 12:15:42 europe-west1-b-k8s-master.c.staging-infrastructure.internal hyperkube[1604]: E0805 12:15:42.516492    1604 servicecontroller.go:171] Failed to process service delta. Retrying: googleapi: Error 404: The resource 'projects/staging-infrastructure/global/firewalls/k8s-fw-a4db9328c3b6b11e5ab9f42010af0397' was not found, notFound
Aug 05 12:15:42 europe-west1-b-k8s-master.c.staging-infrastructure.internal hyperkube[1604]: I0805 12:15:42.516539    1604 servicecontroller.go:601] Successfully updated 2 out of 2 external load balancers to direct traffic to the updated set of nodes
Aug 05 12:16:07 europe-west1-b-k8s-master.c.staging-infrastructure.internal hyperkube[1604]: E0805 12:16:07.620094    1604 servicecontroller.go:171] Failed to process service delta. Retrying: failed to create external load balancer for service default/autobot-cache-graph: googleapi: Error 400: Invalid value for field 'resource.targetTags[0]': 'europe-west1-b-k8s-node-0.c.staging-infrastructure.int'.  Must be a match of regex '(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?)', invalid
Aug 05 12:16:12 europe-west1-b-k8s-master.c.staging-infrastructure.internal hyperkube[1604]: I0805 12:16:12.804512    1604 servicecontroller.go:275] Deleting old LB for previously uncached service default/autobot-cache-graph whose endpoint &{[{146.148.114.97 }]} doesn't match the service's desired IPs []

这是我正在使用的配置(为了清楚起见,省略了下载chmod等) .

在主人:

- name: kube-apiserver.service
  command: start
  content: |
    [Unit]
    Description=Kubernetes API Server
    Requires=setup-network-environment.service etcd.service generate-serviceaccount-key.service
    After=setup-network-environment.service etcd.service generate-serviceaccount-key.service
    [Service]
    EnvironmentFile=/etc/network-environment
    ExecStart=/opt/bin/hyperkube apiserver \
    --cloud-provider=gce \
    --service_account_key_file=/opt/bin/kube-serviceaccount.key \
    --service_account_lookup=false \
    --admission_control=NamespaceLifecycle,NamespaceAutoProvision,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota \
    --runtime_config=api/v1 \
    --allow_privileged=true \
    --insecure_bind_address=0.0.0.0 \
    --insecure_port=8080 \
    --kubelet_https=true \
    --secure_port=6443 \
    --service-cluster-ip-range=10.100.0.0/16 \
    --etcd_servers=http://127.0.0.1:2379 \
    --bind-address=${DEFAULT_IPV4} \
    --logtostderr=true
    Restart=always
    RestartSec=10

- name: kube-controller-manager.service
  command: start
  content: |
    [Unit]
    Description=Kubernetes Controller Manager
    Requires=kube-apiserver.service
    After=kube-apiserver.service
    [Service]
    ExecStart=/opt/bin/hyperkube controller-manager \
    --cloud-provider=gce \
    --service_account_private_key_file=/opt/bin/kube-serviceaccount.key \
    --master=127.0.0.1:8080 \
    --logtostderr=true
    Restart=always
    RestartSec=10

- name: kube-scheduler.service
  command: start
  content: |
    [Unit]
    Description=Kubernetes Scheduler
    Requires=kube-apiserver.service
    After=kube-apiserver.service
    [Service]
    ExecStart=/opt/bin/hyperkube scheduler --master=127.0.0.1:8080
    Restart=always
    RestartSec=10

并在节点上:

- name: kubelet.service
  command: start
  content: |
    [Unit]
    Description=Kubernetes Kubelet
    Requires=setup-network-environment.service
    After=setup-network-environment.service
    [Service]
    EnvironmentFile=/etc/network-environment
    WorkingDirectory=/root
    ExecStart=/opt/bin/hyperkube kubelet \
    --cloud-provider=gce \
    --address=0.0.0.0 \
    --port=10250 \
    --api_servers=<master_ip>:8080 \
    --allow_privileged=true \
    --logtostderr=true \
    --cadvisor_port=4194 \
    --healthz_bind_address=0.0.0.0 \
    --healthz_port=10248
    Restart=always
    RestartSec=10

- name: kube-proxy.service
  command: start
  content: |
    [Unit]
    Description=Kubernetes Proxy
    Requires=setup-network-environment.service
    After=setup-network-environment.service

    [Service]
    ExecStart=/opt/bin/hyperkube proxy \
    --master=<master_ip>:8080 \
    --logtostderr=true
    Restart=always
    RestartSec=10

对我来说,它看起来像命名和IP不匹配,但我不知道如何调整我的配置来解决 . 任何指导都非常感谢 .

1 回答

  • 0

    您是如何在群集中创建节点的?我们已经看到another instance of this issue由于使用的群集引导脚本中的错误未应用预期的节点名称和标记 .

    如果您使用以上两个与上面链接的问题建议的命令重新创建群集,则创建负载 balancer 器应该适合您:

    export OS_DISTRIBUTION=coreos
    cluster/kube-up.sh
    

    否则,您可能需要等待修复问题 .

相关问题