我想使用入口控制器从K8集群外部访问服务。按照Kubernetes Cookbook的5.5,我运行了这个清单:
LinearLayout
Ingress对象在Kubernetes仪表板中可见;但它没有分配的端点:
def pyAC(x, npoints = 10, RetType='abs'):
x = np.sort(x)
ksort = np.argsort(x)
binCount = int(len(x)/npoints) #number of data points in each bin
bins = np.zeros(npoints) #initialize the bins values
binsX = np.zeros(npoints)
for i in range(0, npoints, 1):
bins[i] = x[(i+1) * binCount]
for j in range(((binCount * i) + 1), (binCount * (i+1)), 1):
binsX[i] = x[j] + binsX[i]
binsX = binsX/binCount
return pd.DataFrame({'bins':bins, 'binsX':binsX})
的输出:
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
更新
运行kubectl get ing
给出:
NAME HOSTS ADDRESS PORTS AGE
nginx-public * 80 54m
答案 0 :(得分:1)
实际上这是Kubernetes Dashboard的问题,我们也有同样的问题。
即使未显示,也不表示您的入口无法正常工作。首先,您应该使用kubectl检查入口(kubectl描述入口nginx-public),并验证输出是否与此类似:
Name: test-ingress
Namespace: test
Address:
Default backend: default-http-backend:80 (<none>)
TLS:
test-ssl-secret terminates test.myorg.com
Rules:
Host Path Backends
---- ---- --------
test.myorg.com
/ test-service:80 (<none>)
此后,您应该确认您的服务可以通过指定的主机访问。
更新:
根据您的入口控制器前面的服务,如果您的服务为NodePort类型,则应该可以通过http:// {serverip}:{nodeport-http-port} / web访问您的服务(您将获得2外部端口的范围为30000-39999,如果服务的类型为LoadBalancer,则一个为http端口,另一个为https端口)或http:// {address-from-external-loadbalancer} / web。
第二次更新
在对该问题进行了进一步调查之后,我偶然发现了bug issue的kubernetes-dashboard,指出确实有可能显示入口的端点。问题实际上不是由仪表板引起的,而是入口部署中缺少参数。
对于nginx-ingress-controller,其以下内容:
缺少的选项是-publish-service 如果您使用头盔来部署控制器,则需要添加参数-set controller.publishService.enabled = true