将外部 IP 分配给 Kubernetes 服务 [英] Assign External IP to a Kubernetes Service
问题描述
我设置的重点是实现(如果可能)以下内容:
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.
我发现:
- 我必须使用服务
- 我不能使用 LoadBalancer 类型,因为它仅适用于兼容的云提供商(如 GCE 或 AWS).
- 我应该使用ExternalIPs一个>
- Ingress Resources 是某种反向代理吗?
- 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屋!