代码之家  ›  专栏  ›  技术社区  ›  juan garcia

如何查看kubernetes的入口端点?

  •  0
  • juan garcia  · 技术社区  · 6 年前

    我想知道,哪些是为特定入口正确配置的端点。

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: dictionary
    spec:
      tls:
      - hosts:
        - dictionary.juan.com
        secretName: microsyn-secret
      backend:
        serviceName: microsyn
        servicePort: 8080
      rules:
        - host: dictionary.juan.com
          http:
            paths:
            - path: /synonyms/*
              backend:
                serviceName: microsyn
                servicePort: 8080
    

    正在运行以下服务:

    apiVersion: v1
    kind: Service
    metadata:
      name: microsyn
    spec:
      ports:
      - port: 8080
        targetPort: 8080
        protocol: TCP
        name: http
      selector:
        app: microsyn
    

    此服务正在公开此部署:

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: microsyn
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: microsyn
      template:
        metadata:
          labels:
            app: microsyn
        spec:
          containers:
          - name: microsyn
            image: microsynonyms
            imagePullPolicy: Never
            ports:
            - containerPort: 8080
    

    因此,我从nginx ingres创建了入口,它正在启动并运行本地环境测试的nodeport,稍后我将带它到一个带有负载平衡器的部署:

    https://github.com/nginxinc/kubernetes-ingress/tree/master/examples/complete-example

    所以我做了如下工作:

    minikube service list

    |---------------|----------------------|--------------------------------| | NAMESPACE | NAME | URL | |---------------|----------------------|--------------------------------| | default | kubernetes | No node port | | default | microsyn | No node port | | kube-system | default-http-backend | http://192.168.99.100:30001 | | kube-system | kube-dns | No node port | | kube-system | kubernetes-dashboard | http://192.168.99.100:30000 | | nginx-ingress | nginx-ingress | http://192.168.99.100:31253 | | | | http://192.168.99.100:31229 | |---------------|----------------------|--------------------------------|

    curl http://192.168.99.100:31253/synonyms

    但是我得到一个:

    <html>
      <head><title>404 Not Found</title></head>
      <body bgcolor="white">
        <center><h1>404 Not Found</h1></center>
        <hr><center>nginx/1.15.2</center>
      </body>
    </html>
    

    所以我唯一的nginx是这个minikube的,它工作得很好。但我看不出为这个入口配置了哪些端点。。。

    2018/08/11 16:07:05 [notice] 117#117: signal process started
    I0811 16:07:05.313037       1 event.go:218] Event(v1.ObjectReference{Kind:"Ingress", Namespace:"default", Name:"dictionary", UID:"9728e826-9d80-11e8-9caa-0800270091d8", APIVersion:"extensions", ResourceVersion:"57014", FieldPath:""}): type: 'Normal' reason: 'AddedOrUpdated' Configuration for default/dictionary was added or updated
    W0811 16:15:05.826537       1 reflector.go:341] github.com/nginxinc/kubernetes-ingress/nginx-controller/controller/controller.go:413: watch of *v1.ConfigMap ended with: too old resource version: 56348 (56655)
    

    因此,这意味着字典的入口处理没有错误。

    但为什么我要404?

    在哪里可以看到为此入口配置的终结点??

    1 回复  |  直到 6 年前
        1
  •  2
  •   mdaniel    6 年前

    但为什么我要404?

    入口资源(或者您在问题中展示的资源)使用虚拟主机路由,因此必须设置 host: 与该URL交互时的标题:

    curl -H 'host: dictionary.juan.com' http://192.168.99.100:31253/synonyms/something
    

    path: 要知道的语法 /synonyms/* 比赛 /synonyms ,这就是为什么我在 curl .

    卷曲 主持人: Ingress 暂时为192.168.99.100或使用 dnsmasq 要创建本地名称服务器,您可以在其中重写 dictionary.juan.com 总是回来 192.168.99.100 ,然后Chrome将发送正确的 主持人: 头本身。

    这个问题有点不准确 Endpoint 是一种正式的资源,与 ,但答案是:

    kubectl get endpoints microsyn
    

    我想运行一个命令,该命令显示nginx-->您在听哪个端点?

    首先,查找nginx ingres Pod的名称(如果有多个,其中任何一个都应该这样做),然后查看 nginx.conf 进入

    kubectl exec $ingress_pod cat /etc/nginx/nginx.conf