kubernetes - 谷歌 Kubernetes 引擎入口不起作用

标签 kubernetes google-cloud-platform google-kubernetes-engine

按照 GKE 上的“Kubernetes in Action”一书的指南创建 ingress,但 ingress 不起作用,无法从 Ingress 的公共(public) IP 地址访问。

  • 创建副本集以创建 pod。
  • 创建服务。 (遵循“Kubernetes in Action”中的 nodeport 方法)。
  • 创建入口。

  • ReplicaSet、Service、Ingress创建成功,可以从公网IP访问nodeport,ingress没有UNHEALTHY。

    副本集:
    apiVersion: apps/v1beta2
    kind: ReplicaSet
    metadata:
      name: kubia
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: kubia
      template:
        metadata:
            labels:
              app: kubia
        spec:
          containers:
          - name: kubia
            image: sonyfaye/kubia
    

    服务:
    apiVersion: v1
    kind: Service
    metadata:
      name: kubia-nodeport
    spec:
      type: NodePort
      ports:
      - port: 80
        targetPort: 8080
        nodePort: 30123
      selector:
        app: kubia
    

    入口:
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: kubia
    spec:
      rules:
      - host: kubia.example.com
        http:
          paths:
          - path: /
            backend: 
              serviceName: kubia-nodeport
              servicePort: 80
    

    节点端口本身可以从公共(public) IP 地址访问。

    C:\kube>kubectl 获取 svc
    NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
    kubernetes       ClusterIP   10.59.240.1    <none>        443/TCP        8d
    kubia-nodeport   NodePort    10.59.253.10   <none>        80:30123/TCP   20h
    

    C:\kube>kubectl 获取节点
    NAME                                   STATUS   ROLES    AGE   VERSION
    gke-kubia-default-pool-08dd2133-qbz6   Ready    <none>   8d    v1.12.8-gke.6
    gke-kubia-default-pool-183639fa-18vr   Ready    <none>   8d    v1.12.8-gke.6
    gke-kubia-default-pool-42725220-43q8   Ready    <none>   8d    v1.12.8-gke.6
    

    C:\kube>kubectl 获取节点 -o 宽
    NAME                                   STATUS   ROLES    AGE   VERSION         INTERNAL-IP   EXTERNAL-IP      OS-IMAGE                             KERNEL-VERSION   CONTAINER-RUNTIME
    gke-kubia-default-pool-08dd2133-qbz6   Ready    <none>   8d    v1.12.8-gke.6   10.140.0.17   35.201.224.238   Container-Optimized OS from Google   4.14.119+        docker://17.3.2
    gke-kubia-default-pool-183639fa-18vr   Ready    <none>   8d    v1.12.8-gke.6   10.140.0.18   35.229.152.12    Container-Optimized OS from Google   4.14.119+        docker://17.3.2
    gke-kubia-default-pool-42725220-43q8   Ready    <none>   8d    v1.12.8-gke.6   10.140.0.16   34.80.225.64     Container-Optimized OS from Google   4.14.119+        docker://17.3.2
    

    C:\kube> curl http://34.80.225.64:30123
    You've hit kubia-j2lnr
    

    但是无法从外部访问入口。

    主机文件:
    34.98.92.110 kubia.example.com
    

    C:\kube>kubectl 描述入口
    Name:             kubia
    Namespace:        default
    Address:          34.98.92.110
    Default backend:  default-http-backend:80 (10.56.0.7:8080)
    Rules:
      Host               Path  Backends
      ----               ----  --------
      kubia.example.com
                         /   kubia-nodeport:80 (10.56.0.14:8080,10.56.1.6:8080,10.56.3.4:8080)
    Annotations:
      ingress.kubernetes.io/backends:         {"k8s-be-30123--c4addd497b1e0a6d":"HEALTHY","k8s-be-30594--c4addd497b1e0a6d":"HEALTHY"}
      ingress.kubernetes.io/forwarding-rule:  k8s-fw-default-kubia--c4addd497b1e0a6d
      ingress.kubernetes.io/target-proxy:     k8s-tp-default-kubia--c4addd497b1e0a6d
      ingress.kubernetes.io/url-map:          k8s-um-default-kubia--c4addd497b1e0a6d
    Events:    
    
                                   <none>
    

    C:\kube> curl http://kubia.example.com
    curl: (7) Failed to connect to kubia.example.com port 80: Timed out
    

    C:\kube>telnet kubia.example.com 80
    Connecting To kubia.example.com...
    

    C:\kube>telnet 34.98.92.110 80
    Connecting To 34.98.92.110...Could not open connection to the host, on port 80: Connect failed
    

    从内网试过。
    curl 34.98.92.110 IP可以得到一些resule,34.98.92.110的80端口可以从内网访问。

    C:\kube>kubectl exec -it kubia-lrt9x bash
    root@kubia-lrt9x:/# curl http://kubia.example.com
    curl: (6) Could not resolve host: kubia.example.com
    

    root@kubia-lrt9x:/# curl http://34.98.92.110default backend - 404 root@kubia-lrt9x:/# curl http://34.98.92.110default backend - 404 root@kubia-lrt9x:/#
    root@kubia-lrt9x:/# curl http://10.56.0.7:8080default backend - 404 root@kubia-lrt9x:/#

    有人知道如何调试吗?

    nodeport 已添加到防火墙,否则 nodeport 不可访问。入口 IP 似乎不需要添加到防火墙。

    最佳答案

    尝试暴露副本集以便能够从外部连接:

    $ kubectl expose rs hello-world --type=NodePort --name=my-service
    

    请记住首先删除服务 kubia-nodeport 并删除 Ingress 配置文件中的选择器和服务部分,然后使用 应用更改kubectl 申请 命令。

    您可以在这里找到更多信息:exposing-externalip .

    有用的文档:kubectl-expose .

    关于kubernetes - 谷歌 Kubernetes 引擎入口不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56660336/

    相关文章:

    kubernetes - 了解 openshift 中的持久卷声明模式

    java - 杰迪斯数据异常 : ERR WATCH inside MULTI is not allowed

    amazon-web-services - 如何启用从本地kubernetes到AWS的访问?

    kubernetes - 从 kubectl 输出显示失败的 pod

    python - GCP Firestore Python 凭据

    kubernetes - 删除GCP Kubernetes上的默认CPU请求和限制

    Jenkins X : trying to execute 'jx boot' from a non requirements repo

    google-cloud-platform - 在谷歌数据流工作器上暂存文件

    kubernetes - 入口 Controller 和 Google kubernetes

    tensorflow - Tensorflow 服务的批量预测问题