分配外部IP的Kubernetes服务

问题描述:

编辑:我设置的整点是实现(如果可能)以下:分配外部IP的Kubernetes服务

  • 我有多个K8S节点
  • 当我联系的IP地址(来自我公司的网络),它应该被路由到我的容器/ pod/service /其中之一。
  • 我应该能够轻松地设置该IP(就像我的服务.yml定义)

我正在为了一个小Kubernetes群(带内置kubeadm)来评估,如果我可以移动我的码头工人(旧)群设置为k8s。我绝对需要的功能是将IP分配给容器的功能,就像我使用MacVlan一样。

在我目前的泊坞窗的设置,我使用MacVlan指定由我公司的网络,一些容器IP地址,这样我就可以直接到达(不反向代理)一样,如果它是任何物理服务器。我正在努力实现与k8s类似的东西。

我发现:

  • 我不得不使用服务
  • 我不能使用负载平衡器类型,因为它是唯一兼容的云服务提供商(如GCE或AWS)。
  • 我应该使用ExternalIPs
  • 入口资源是某种反向代理?

我YAML文件是:

apiVersion: apps/v1beta1 
kind: Deployment 
metadata: 
     name: nginx-deployment 
spec: 
    template: 
    metadata: 
     labels: 
     app: nginx 
    spec: 
     containers: 
     - name: nginx 
     image: nginx:1.7.9 
     ports: 
     - containerPort: 80 
     nodeSelector: 
     kubernetes.io/hostname: k8s-slave-3 
--- 
kind: Service 
apiVersion: v1 
metadata: 
    name: nginx-service 
spec: 
    type: ClusterIP 
    selector: 
    app: nginx 
    ports: 
    - name: http 
     protocol: TCP 
     port: 80 
     targetPort: 80 
    externalIPs: 
    - A.B.C.D 

我跳,我的服务会得到IP A.B.C.D(这是我公司的网络之一)。我的部署正在工作,因为我可以使用它的ClusterIP从k8s群集内部到达我的nginx容器。

我缺少什么?或者至少,我在哪里可以找到关于我的网络流量的信息,以查看数据包是否即将到来?

编辑

$ kubectl get svc 
NAME   CLUSTER-IP  EXTERNAL-IP  PORT(S) AGE 
kubernetes  10.96.0.1  <none>   443/TCP 6d 
nginx-service 10.102.64.83 A.B.C.D   80/TCP 23h 

感谢。

+0

您确定外部IP提到路由到k8s群集节点吗?另外,当你运行kubectl获得服务时,你会看到什么? –

+0

你可以尝试不指定'type:ClusterIP' –

+0

我增加了'kubectl get svc'输出为EDIT。删除'type:ClusterIP'不会改变任何东西,因为它是默认值。如何检查流量是否进入我的群集?在'kube-proxy'中? –

你可以尝试KUBE-的keepalived-VIP configurtion路由流量。 https://github.com/kubernetes/contrib/tree/master/keepalived-vip

您可以尝试在服务的yaml文件中添加“type:NodePort”,然后您将有一个端口通过Web浏览器或从外部访问它。对我而言,这有帮助。