Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
空地址kubernetes入口_Kubernetes_Kubernetes Ingress - Fatal编程技术网

空地址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

我尝试在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/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

我面临着类似的问题,意识到我需要:

  • 启用NGINX入口控制器,运行以下命令:

    helm install stable/nginx-ingress --name my-nginx
    
    minikube addons enable ingress
    
  • 验证NGINX入口控制器是否正在运行

    kubectl get pods -n kube-system
    

  • nginx入口控制器pod应处于运行状态。

    我在GKE(谷歌Kubernetes引擎)上遇到了同样的问题。结果发现入口设置有问题,我为所需的服务使用了不正确的名称。您应该通过执行以下命令检查错误:

    kubectl describe ingress <your-ingress-name>
    
    kubectl描述入口
    
    您正在寻找的是一种测试入口资源的方法

    您可以通过以下方式完成此操作:

  • 查找入口控制器pod/s的ip地址,并将端口80/443与此ip一起使用
  • 查找公开入口控制器部署的服务
  • 如果没有服务,您可以创建一个并公开入口控制器部署
  • 如果需要主机名,则需要管理dns条目

  • nginx入口控制器
    pod的日志中有什么有用的信息吗?您好,我发现了这个问题。我原以为服务将在端口80上导出,但它是在30927上导出的。我可以将其配置为在端口80上导出吗?太好了!成功了。解释得很好@多林:你应该用绿色的记号接受这个答案,这样它也能帮助别人。谢谢:)这个问题不是关于米尼库贝在这种情况下谁是“外部客户”?另外,您所说的“将分配给ingress nginx服务的NodePort附加到HTTP请求”是什么意思,您将什么附加到HTTP请求,以及如何将某些内容附加到HTTP请求?谢谢外部客户端:任何机器只能触摸节点机器,不能触摸Pod网络。将节点端口附加到HTTP请求:
    http://node.mydomain:nodeport