将外部 IP 分配给 Kubernetes 服务 [英] Assign External IP to a Kubernetes Service

查看:29
本文介绍了将外部 IP 分配给 Kubernetes 服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我设置的重点是实现(如果可能)以下内容:

The whole point of my setup is to achieve (if possible) the following :

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

我正在运行一个小型 Kubernetes 集群(使用 kubeadm 构建),以评估是否可以将我的 Docker(旧)Swarm 设置移至 k8s.我绝对需要的功能是能够为容器分配 IP,就像我在 MacVlan 中所做的那样.

I'm running a small Kubernetes cluster (built with kubeadm) in order to evaluate if I can move my Docker (old)Swarm setup to k8s. The feature I absolutely need is the ability to assign IP to containers, like I do with MacVlan.

在我当前的 docker 设置中,我使用 MacVlan 将 IP 地址从我公司的网络分配给某些容器,以便我可以直接访问(无需反向代理),就像它是任何物理服务器一样.我正在尝试使用 k8s 实现类似的目标.

In my current docker setup, I'm using MacVlan to assign IP addresses from my company's network to some containers so I can reach directly (without reverse-proxy) like if it's any physical server. I'm trying to achieve something similar with k8s.

我发现:

  • I have to use Service
  • I can't use the LoadBalancer type, as it's only for compatible cloud providers (like GCE or AWS).
  • I should use ExternalIPs
  • Ingress Resources are some kind of reverse proxy ?

我的 yaml 文件是:

My yaml file is :

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 容器.

I was hopping that my service would get the IP A.B.C.D (which is one of my company's network). My deployment is working as I can reach my nginx container from inside the k8s cluster using it's ClusterIP.

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

What am I missing ? Or at least, where can I find informations on my network traffic in order to see if packets are coming ?

编辑:

$ 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

谢谢.

推荐答案

首先运行这个命令:

kubectl get -n namespace services

以上命令将返回如下输出:

Above command will return output like this:

 NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
backend   NodePort   10.100.44.154         <none>          9400:3003/TCP   13h   
frontend        NodePort   10.107.53.39     <none>        3000:30017/TCP   13h

从上面的输出可以清楚地看出,外部 IP 尚未分配给服务.要将外部 IP 分配给后端服务,请运行以下命令.

It is clear from the above output that External IPs are not assigned to the services yet. To assign External IPs to backend service run the following command.

 kubectl patch svc backend -p '{"spec":{"externalIPs":["192.168.0.194"]}}'

并将外部 IP 分配给 frontend 服务运行此命令.

and to assign external IP to frontend service run this command.

 kubectl patch svc frontend -p '{"spec":{"externalIPs":["192.168.0.194"]}}'

现在获取命名空间服务以检查任一外部 IP 分配:

Now get namespace service to check either external IPs assignment:

kubectl get -n namespace services

我们得到这样的输出:

NAME     TYPE     CLUSTER-IP     EXTERNAL-IP    PORT(S)             AGE
backend  NodePort 10.100.44.154  192.168.0.194  9400:3003/TCP       13h
frontend NodePort 10.107.53.39   192.168.0.194  3000:30017/TCP      13h

干杯!!!Kubernetes 外部 IP 现已分配.

Cheers!!! Kubernetes External IPs are now assigned .

这篇关于将外部 IP 分配给 Kubernetes 服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆