Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 如何让nginx入口处理k3s集群上的服务请求?_Kubernetes_Kubernetes Ingress_Nginx Ingress - Fatal编程技术网

Kubernetes 如何让nginx入口处理k3s集群上的服务请求?

Kubernetes 如何让nginx入口处理k3s集群上的服务请求?,kubernetes,kubernetes-ingress,nginx-ingress,Kubernetes,Kubernetes Ingress,Nginx Ingress,我希望nginx ingress负载平衡器能够处理来自网络/互联网中其他机器的请求 我已经安装了带metallb、nginx入口和cert manager的k3s。所有吊舱都在运行。现在我有了以下部署和服务 # webserver-deployment.yaml --- apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: app: httpd name: httpd

我希望nginx ingress负载平衡器能够处理来自网络/互联网中其他机器的请求

我已经安装了带metallb、nginx入口和cert manager的k3s。所有吊舱都在运行。现在我有了以下部署和服务

# webserver-deployment.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: httpd
  name: httpd
  namespace: webserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpd
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: httpd
    spec:
      containers:
      - image: httpd:2.4.46
        name: httpd
      nodeSelector:
        role: worker
status: {}


# webserver-service.yaml
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: httpd
  name: httpd
  namespace: webserver
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: httpd
status:
  loadBalancer: {}
可以从群集访问该服务

% curl 10.43.53.255
<html><body><h1>It works!</h1></body></html>
我想我可以从入口IP
192.168.178.240

nginx-ingress-ingress-nginx-controller-admission   ClusterIP      10.43.116.250   <none>            443/TCP                      3d     app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
nginx-ingress-ingress-nginx-controller             LoadBalancer   10.43.10.136    192.168.178.240   80:31517/TCP,443:31733/TCP   3d     app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx

从上面看哪一个是不相等的?那么,我如何正确设置入口?

您能添加入口描述吗?您是指pod nginx入口控制器吗?不,我说的是入口资源
k get ingres-n webserver httpd ingres-oyaml
但是您发布的文件webserver-ingres.yaml在该命名空间中定义了一个入口。这是在向Nginx入口控制器发出请求时将服务与路径关联的定义。如果我添加了它,那么我在错误的机器上
nginx-ingress-ingress-nginx-controller-admission   ClusterIP      10.43.116.250   <none>            443/TCP                      3d     app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
nginx-ingress-ingress-nginx-controller             LoadBalancer   10.43.10.136    192.168.178.240   80:31517/TCP,443:31733/TCP   3d     app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
curl 192.168.178.240:80
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
% kubectl get ingress -n webserver httpd-ingress -oyaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"networking.k8s.io/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingress.class":"nginx"},"name":"httpd-ingress","namespace":"webserver"},"spec":{"rules":[{"http":{"paths":[{"backend":{"serviceName":"httpd","servicePort":80},"path":"/"}]}}]}}
    kubernetes.io/ingress.class: nginx
  creationTimestamp: "2021-04-23T19:21:40Z"
  generation: 1
  managedFields:
  - apiVersion: networking.k8s.io/v1beta1
    fieldsType: FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .: {}
          f:kubectl.kubernetes.io/last-applied-configuration: {}
          f:kubernetes.io/ingress.class: {}
      f:spec:
        f:rules: {}
    manager: kubectl-client-side-apply
    operation: Update
    time: "2021-04-23T19:21:40Z"
  - apiVersion: networking.k8s.io/v1beta1
    fieldsType: FieldsV1
    fieldsV1:
      f:status:
        f:loadBalancer:
          f:ingress: {}
    manager: nginx-ingress-controller
    operation: Update
    time: "2021-04-23T19:21:47Z"
  name: httpd-ingress
  namespace: webserver
  resourceVersion: "25412"
  uid: ab3706c5-8d93-4a91-b8ee-72bc7995f662
spec:
  rules:
  - http:
      paths:
      - backend:
          service:
            name: httpd
            port:
              number: 80
        path: /
        pathType: ImplementationSpecific
status:
  loadBalancer:
    ingress:
    - ip: 192.168.178.36


$ curl 192.168.178.36
curl: (7) Failed to connect to 192.168.178.36 port 80: Connection refused