我设置的整个目的是(如果可能)实现以下内容:
- 我有多个k8s节点
- 当我联系公司网络中的IP地址时,它应该被路由到我的一个容器/ pod /服务/任何东西。
- 我应该能够轻松设置该IP(例如在我的服务.yml定义中)
我正在运行一个小型Kubernetes集群(使用kubeadm构建),以评估是否可以将我的Docker(旧版)Swarm设置移动到k8s。我绝对需要的功能是能够为容器分配IP,就像我使用MacVlan一样。
在我的当前docker设置中,我使用MacVlan将IP地址从公司网络分配给某些容器,以便我可以直接访问它们(无需反向代理),就像访问任何物理服务器一样。我正在尝试通过k8s实现类似的功能。
我发现:
- 我必须使用Service
- 我不能使用LoadBalancer类型,因为它只适用于兼容的云提供商(如GCE或AWS)。
- 我应该使用{{link1:ExternalIPs}}
- Ingress Resources是某种反向代理吗?
我的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
kubectl get svc
的输出添加为编辑内容。删除type: ClusterIP
不会改变任何东西,因为它是默认值。我该如何检查流量是否到达我的集群?在kube-proxy
中吗? - Jérôme Pin