编辑:我的设置的重点是实现(如果可能的话)以下内容:
- 我有多个 k8s 节点
- 当我联系一个 IP 地址(来自我公司的网络)时,它应该被路由到我的容器/pod/service/whatever 之一。
- 我应该能够轻松设置该 IP(就像在我的服务 .yml 定义中一样)
我正在运行一个小型 Kubernetes 集群(使用 kubeadm 构建),以评估是否可以将我的 Docker(旧)Swarm 设置移动到 k8s。我绝对需要的功能是能够为容器分配 IP,就像我对 MacVlan 所做的那样。
在我当前的 docker 设置中,我使用 MacVlan 将我公司网络中的 IP 地址分配给一些容器,这样我就可以直接访问(无需反向代理),就像它是任何物理服务器一样。我正在尝试用 k8s 实现类似的东西。
我发现:
- 我必须使用服务
- 我不能使用LoadBalancer类型,因为它仅适用于兼容的云提供商(如 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 ABCD(这是我公司的网络之一)。我的部署工作正常,因为我可以使用它的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
谢谢。