Docker Kubernetes HyperV群集公开服务

Docker Kubernetes HyperV群集公开服务,docker,ubuntu,kubernetes,ubuntu-18.04,Docker,Ubuntu,Kubernetes,Ubuntu 18.04,TL;博士 如何从主机通过Hyper-V连接到kubernetes群集,并连接到kubernetes代理(kube代理) 所以我有两台Ubuntu18.04.1 LTS服务器的hyper-v设置。相同的设置 一个是大师 OS Image: Ubuntu 18.04.1 LTS Operating System: linux Architecture: amd64 Container Runtime Versio

TL;博士

如何从主机通过Hyper-V连接到kubernetes群集,并连接到kubernetes代理(kube代理)


所以我有两台Ubuntu18.04.1 LTS服务器的hyper-v设置。相同的设置

一个是大师

OS Image:                   Ubuntu 18.04.1 LTS
Operating System:           linux
Architecture:               amd64
Container Runtime Version:  docker://18.6.0
Kubelet Version:            v1.11.1
Kube-Proxy Version:         v1.11.1
另一个节点是:

OS Image:                   Ubuntu 18.04.1 LTS
Operating System:           linux
Architecture:               amd64
Container Runtime Version:  docker://18.6.0
Kubelet Version:            v1.11.1
Kube-Proxy Version:         v1.11.1
默认情况下,它运行以下POD:

kube-system   coredns-78fcdf6894-6ld8l               1/1       Running   1          4h
kube-system   coredns-78fcdf6894-ncp79               1/1       Running   1          4h
kube-system   etcd-node1                             1/1       Running   1          4h
kube-system   kube-apiserver-node1                   1/1       Running   1          4h
kube-system   kube-controller-manager-node1          1/1       Running   1          4h
kube-system   kube-proxy-942xh                       1/1       Running   1          4h
kube-system   kube-proxy-k6jl4                       1/1       Running   1          4h
kube-system   kube-scheduler-node1                   1/1       Running   1          4h
kube-system   kubernetes-dashboard-6948bdb78-9fbv8   1/1       Running   0          25m
kube-system   weave-net-fzj8h                        2/2       Running   2          3h
kube-system   weave-net-s648g                        2/2       Running   3          3h
这两个节点通过两个IP地址暴露到我的LAN:

192.168.1.116
192.168.1.115
我已经公开了我的部署:

service.yml

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort # internal cluster management
  ports:
  - port: 80 # container port
    nodePort: 30001 # outside port
    protocol: TCP
    targetPort: http
  selector:
    app: my-api
    tier: backend
列出:

$ kubectl get svc -o wide
my-service   NodePort    10.105.166.48   <none>        80:30001/TCP   50m       app=my-api,tier=backend
kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP        4h        <none>
我的api显然已经在播客中了

当我查询服务IP时

$ curl 10.105.166.48:80/api/health

它只是超时而已

主机的我的网络配置:

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.116  netmask 255.255.255.0  broadcast 192.168.1.255

weave: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1376
    inet 10.40.0.0  netmask 255.240.0.0  broadcast 10.47.255.255

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
执行
nslookup
显示没有主机名:

$ nslookup my-service
Server:         127.0.0.53
Address:        127.0.0.53#53

** server can't find eyemenu-api-service: SERVFAIL

要点击节点端口30001,您需要使用节点的ip

curl nodeip:30001/api/health

群集中的吊舱不知道节点端口30001

nodePort将向kubernetes群集的所有工作节点公开端口,因此您可以使用:

旋度节点1:30001/api/健康或
curl node2:30001/api/health

我不应该卷曲节点,我应该能够卷曲服务。。。节点是临时的,Ubernetes服务是集群内部的。如果不在kube群集中,则无法访问服务名称。为了从外部世界访问您的POD,您可以使用ingress(例如ingress nginx),虚拟主机指向ingress controller正在运行的节点,或者通过nodeport。
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 192.168.1.116  netmask 255.255.255.0  broadcast 192.168.1.255

weave: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1376
    inet 10.40.0.0  netmask 255.240.0.0  broadcast 10.47.255.255

docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
    inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
https://192.168.1.116:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
$ nslookup my-service
Server:         127.0.0.53
Address:        127.0.0.53#53

** server can't find eyemenu-api-service: SERVFAIL