我想使用入口控制器从K8集群外部访问服务 . 在Kubernetes Cookbook的5.5之后,我运行了这个清单:
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
name: nginx-public
annotations:
ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host:
http:
paths:
- path: /web
backend:
serviceName: nginx
servicePort: 80
Ingress对象在Kubernetes仪表板中可见;但它没有指定的 endpoints :
输出 kubectl get ing
:
NAME HOSTS ADDRESS PORTS AGE
nginx-public * 80 54m
update
运行 kubectl describe ingress nginx-public
给出:
Name: nginx-public
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
*
/web nginx:80 (<none>)
Annotations:
ingress.kubernetes.io/rewrite-target: /
Events: <none>
1 回答
实际上这是Kubernetes Dashboard的一个问题,我们也有同样的问题 .
即使它没有显示,也不代表你的入口不起作用 . 首先,您应该使用kubectl(kubectl describe ingress nginx-public)检查入口,并验证输出是否熟悉:
之后,您应该通过指定的主机验证您的服务是否可以访问 .
Update:
根据入口控制器前面的服务,您的服务应该可以通过http:// : / web访问,以防您的服务类型为NodePort(您将获得2个外部端口)如果服务类型为LoadBalancer,则30000-39999范围,一个是http端口,另一个是https端口)或http:// / web .
2nd-Update
经过对该问题的进一步调查后,我偶然发现了一个kubernetes-dashboard,表明它是由仪表板引起的,但是在入口部署中缺少一个参数 .
对于nginx-ingress-controller,其内容如下:
NGINX Ingress CLI arguments
缺少的选项是--publish-service如果您使用helm来部署控制器,则需要添加参数--set controller.publishService.enabled = true