我是Kubernetes的新手,我一直在浏览并查看为什么我的外部IP无法解析。
我在ubuntu 16.04发行版上运行minikube。
在仪表板的服务概述中,我有这个
my-nginx | run: my-nginx | 10.0.0.11 | my-nginx:80 TCP my-nginx:32431 | TCP 192.168.42.71:80
当我在http://192.168.42.165:32431/进行http get时,我会收到nginx页面。
服务的配置如下
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Service
metadata:
creationTimestamp: 2016-09-23T12:11:13Z
labels:
run: my-nginx
name: my-nginx
namespace: default
resourceVersion: "4220"
selfLink: /api/v1/namespaces/default/services/my-nginx
uid: d24b617b-8186-11e6-a25b-9ed0bca2797a
spec:
clusterIP: 10.0.0.11
deprecatedPublicIPs:
- 192.168.42.71
externalIPs:
- 192.168.42.71
ports:
- nodePort: 32431
port: 80
protocol: TCP
targetPort: 80
selector:
run: my-nginx
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer: {}
这些是我的ifconfog的一部分
virbr0 Link encap:Ethernet HWaddr fe:54:00:37:8f:41
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4895 errors:0 dropped:0 overruns:0 frame:0
TX packets:8804 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:303527 (303.5 KB) TX bytes:12601315 (12.6 MB)
virbr1 Link encap:Ethernet HWaddr fe:54:00:9a:39:74
inet addr:192.168.42.1 Bcast:192.168.42.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7462 errors:0 dropped:0 overruns:0 frame:0
TX packets:12176 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3357881 (3.3 MB) TX bytes:88555007 (88.5 MB)
vnet0 Link encap:Ethernet HWaddr fe:54:00:37:8f:41
inet6 addr: fe80::fc54:ff:fe37:8f41/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4895 errors:0 dropped:0 overruns:0 frame:0
TX packets:21173 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:372057 (372.0 KB) TX bytes:13248977 (13.2 MB)
vnet1 Link encap:Ethernet HWaddr fe:54:00:9a:39:74
inet addr:192.168.23.1 Bcast:0.0.0.0 Mask:255.255.255.255
inet6 addr: fe80::fc54:ff:fe9a:3974/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7462 errors:0 dropped:0 overruns:0 frame:0
TX packets:81072 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3462349 (3.4 MB) TX bytes:92936270 (92.9 MB)
有没有人有一些指示,因为我迷路了?
答案 0 :(得分:18)
minikube known issues解释说不支持云负载均衡器。 击>
但正如minikube issue #384中所述,它们的处理方式与NodePort
类型的服务相同:
启动minikube并启动nginx服务
$ minikube start
$ kubectl run my-nginx --image=nginx --replicas=1 --port=80
$ kubectl expose deployment my-nginx --target-port=80 --type=LoadBalancer
您可以通过以下两种方式之一确定此负载均衡服务的URL。艰难的方式:
$ echo http://$(minikube ip):$(kubectl get service my-nginx --output='jsonpath={.spec.ports[0].NodePort}')
或简单方法
$ minikube service my-nginx --url
击> <击> 撞击>
我找到了一个blog posting,它描述了如何在minikube上运行入口控制器以提供负载平衡功能。
因此,启动基于traefik的入口控制器:
$ kubectl create -f https://raw.githubusercontent.com/containous/traefik/master/examples/k8s/traefik.yaml
一旦运行,请按如下方式创建Ingress,根据主机名路由流量:
$ cat ingress.yml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-nginx-ingress
spec:
rules:
- host: my-nginx.192.168.99.100.xip.io
http:
paths:
- path: /
backend:
serviceName: my-nginx
servicePort: 80
$ kubectl create -f ingress.yml
ingress "my-nginx-ingress" created
现在,nginx服务在以下URL上公开:
http://my-nginx.192.168.99.100.xip.io/
注意:
答案 1 :(得分:2)
Minikube不支持LoadBalancer服务,因此该服务将永远不会获得外部IP。
但是您仍然可以通过其外部端口访问该服务。
您可以通过运行以下命令获取IP和端口:
minikube service <service_name>
答案 2 :(得分:0)
我假设您在virtualbox中使用minikube(没有信息如何启动它以及您的主机操作系统是什么。)
当您使用type = LoadBalancer创建服务时,还应该运行minikube tunnel
以从群集公开LoadBalancers。然后,当您运行kubectl get svc
时,将获得LoadBalancer的外部IP。它仍然是minikube的IP,因此,如果要从计算机的外部公开它,则应在计算机上放置一些反向代理或隧道。
答案 3 :(得分:0)
TL; DR minikube具有“附加组件”,可用于处理入口和负载平衡。只需启用并配置其中之一即可。
答案 4 :(得分:0)
如果您在 windows 上运行 Minikube,只需简单运行:
minikube tunnel
上述命令将隧道您的容器到本地主机。然后您可以通过以下方式获取您的服务 URL:
kubectl get services [service name]
将 [服务名称] 替换为您的服务名称。不要忘记在外部 IP 端点上添加映射端口。