空地址kubernetes入口
我尝试在kubernetes集群上配置入口。我按照安装入口控制器的步骤,运行了以下命令空地址kubernetes入口,kubernetes,kubernetes-ingress,Kubernetes,Kubernetes Ingress,我尝试在kubernetes集群上配置入口。我按照安装入口控制器的步骤,运行了以下命令 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/ba
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
在默认http后端和nginx入口控制器运行之后:
ingress-nginx default-http-backend-846b65fb5f-6kwvp 1/1 Running 0 23h 192.168.2.28 node1
ingress-nginx nginx-ingress-controller-d658896cd-6m76j 1/1 Running 0 6m 192.168.2.31 node1
我尝试测试入口,并部署了以下服务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: echoserver-deploy
spec:
replicas: 2
selector:
matchLabels:
app: echo
template:
metadata:
labels:
app: echo
spec:
containers:
- name: my-echo
image: gcr.io/google_containers/echoserver:1.8
---
apiVersion: v1
kind: Service
metadata:
name: echoserver-svc
spec:
selector:
app: echo
ports:
- protocol: TCP
port: 8080
targetPort: 8080
以及以下入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: happy-ingress
annotations:
INGRESS.kubernetes.io/rewrite-target: /
spec:
rules:
- host: happy.k8s.io
http:
paths:
- path: /echoserver
backend:
serviceName: echoserver-svc
servicePort: 8080
当我运行命令“kubectl get ing”时,我收到:
NAME HOSTS ADDRESS PORTS AGE
happy-ingress happy.k8s.io 80 14m
我没有解决地址问题,我也不知道问题出在哪里,因为所有的播客都在运行。你能给我一个提示,说明这个问题是什么吗
谢谢您的
hostname happy.k8s.io
应该解析为nginx入口控制器的实际IP地址,该地址指向负载平衡器的前端
您可以检查群集在哪个IP下工作:
bash-3.2$ kubectl cluster-info
Kubernetes master is running at https://192.168.1.100:8443
KubeDNS is running at https://192.168.1.100:8443/api/v1/namespaces/kube-
system/services/kube-dns:dns/proxy
使用curl
bash-3.2$ curl http://192.168.1.100:8080
default backend - 404
最后,您只需将域条目添加到/etc/hosts
:
192.168.1.100 happy.k8s.io
我不知道这是否有帮助,但我也有同样的问题。 我没有安装任何入口控制器,或者像一些人在Github上说的那样, 我只是创建了一个入口,以便能够将我的子域指向不同的服务,起初我的入口没有IP地址(它是空的) 我想这是因为我为前端应用程序和后端api提供的两项服务都是LoadBalancer类型的。 我把它改为NodePort,因为他们现在不需要外部ip,入口控制器将管理url的去向 当我将我的服务类型更改为NodePort时,2或3分钟后,入口的IP地址出现了。 当我将Cloudflare DNS指向新的入口IP时,我测试了我的子域,它成功了 以前
apiVersion: v1
kind: Service
metadata:
name: delivereotk
spec:
ports:
- port: 80
selector:
app: delivereotk
type: LoadBalancer
之后
入口
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
spec:
rules:
- host: delivereo.tk
http:
paths:
- backend:
serviceName: delivereotk
servicePort: 80
- host: back.delivereo.tk
http:
paths:
- backend:
serviceName: backdelivereotk
servicePort: 80
在创建入口规则之前,必须按照以下命令启用
ingres加载项
。您还可以在执行任何其他命令之前启用它
$ minikube addons enable ingress
ingress was successfully enabled
等待吊舱启动并运行。您可以通过执行以下命令进行检查,并等待类似的输出
kubectl get pods -n kube-system | grep nginx-ingress-controller
nginx-ingress-controller-5984b97644-jjng2 1/1 Running 2 1h
对于部署
您必须指定容器端口
,对于服务
您必须指定http
协议
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: echoserver-deploy
spec:
replicas: 2
selector:
matchLabels:
app: my-echo
template:
metadata:
labels:
app: my-echo
spec:
containers:
- name: my-echo
image: gcr.io/kubernetes-e2e-test-images/echoserver:2.1
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: echoserver-svc
spec:
selector:
app: my-echo
ports:
- protocol: TCP
port: 80
targetPort: 8080
name: http
对于入口规则,将端口servicePort
从8080更改为默认http端口80
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: happy-ingress
annotations:
INGRESS.kubernetes.io/rewrite-target: /
spec:
rules:
- host: happy.k8s.io
http:
paths:
- path: /echoserver
backend:
serviceName: echoserver-svc
servicePort: 80
现在应用这些文件并创建您的POD、服务和入口规则。请稍等,获取入口规则的地址将需要几分钟。
现在,您可以使用minikube ip
地址访问您的服务,但还不能按主机名访问。为此,您必须在/etc/hosts
文件中添加主机和相应的IP地址。因此,在您喜爱的编辑器中打开/etc/hosts
文件,并在下面的一行中添加minikube的实际IP
<minikube_ip> happy.k8s.io
正如官方所说:
因为NodePort服务不获取由分配的LoadBalancerIP
定义,NGINX入口控制器不更新
它管理的入口对象
您已经按照安装指南中的说明部署了NGINX入口控制器,因此您的地址为空是正常的
相反,外部客户端必须将分配给ingress nginx服务的NodePort附加到HTTP请求
附:这个问题与minikube无关我也有过类似的案例。我们编写的入口只是一个入口规则。为了使地址可用,我们还需要运行入口控制器吊舱 只需检查控制器吊舱是否正在运行
kubectl get pods
您应该让控制器吊舱如图所示运行。如果没有,你可以用头盔安装
如果您正在使用helm2,只需使用以下命令:
helm install stable/nginx-ingress --name my-nginx
minikube addons enable ingress
请按照本文档的说明以不同的方式进行安装
在进行舵杆安装时,如果没有安装舵柄,可能会出现以下问题
Error: could not find tiller
要修复它,请按以下步骤安装舵柄:
kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
helm init --service-account tiller
kubectl get pods --namespace kube-system
验证舵柄是否工作:
kubectl -n kube-system create serviceaccount tiller
kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller
helm init --service-account tiller
kubectl get pods --namespace kube-system
我面临着类似的问题,意识到我需要:
helm install stable/nginx-ingress --name my-nginx
minikube addons enable ingress
kubectl get pods -n kube-system
nginx入口控制器pod应处于运行状态。我在GKE(谷歌Kubernetes引擎)上遇到了同样的问题。结果发现入口设置有问题,我为所需的服务使用了不正确的名称。您应该通过执行以下命令检查错误:
kubectl describe ingress <your-ingress-name>
kubectl描述入口
您正在寻找的是一种测试入口资源的方法
您可以通过以下方式完成此操作:
nginx入口控制器
pod的日志中有什么有用的信息吗?您好,我发现了这个问题。我原以为服务将在端口80上导出,但它是在30927上导出的。我可以将其配置为在端口80上导出吗?太好了!成功了。解释得很好@多林:你应该用绿色的记号接受这个答案,这样它也能帮助别人。谢谢:)这个问题不是关于米尼库贝在这种情况下谁是“外部客户”?另外,您所说的“将分配给ingress nginx服务的NodePort附加到HTTP请求”是什么意思,您将什么附加到HTTP请求,以及如何将某些内容附加到HTTP请求?谢谢外部客户端:任何机器只能触摸节点机器,不能触摸Pod网络。将节点端口附加到HTTP请求:http://node.mydomain:nodeport