【问题标题】:Google Kubernetes Engine Ingress doesn't work谷歌 Kubernetes 引擎入口不起作用
【发布时间】:2019-11-01 18:15:21
【问题描述】:

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

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

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

节点端口本身可以从公共 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

从 Intranet 尝试过。 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.110 default backend - 404root@kubia-lrt9x:/# curl http://34.98.92.110 default backend - 404root@kubia-lrt9x:/# root@kubia-lrt9x:/# curl http://10.56.0.7:8080 default backend - 404root@kubia-lrt9x:/#

有人知道如何调试吗?

节点端口已添加到防火墙,否则节点端口无法访问。 Ingress IP 似乎不需要添加到防火墙中。

【问题讨论】:

  • 您是否将入口 IP 地址映射到 DNS 记录?
  • 谢谢,苛刻。是的,我做到了。就我而言,使用主机文件映射主机文件:34.98.92.110 kubia.example.com。问题是,入口ip的80端口不能从互联网访问,但可以从kubernetes内网访问。它输出默认后端 - 404 到 Intranet 访问。

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


【解决方案1】:

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

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

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

您可以在此处找到更多信息:exposing-externalip

有用的文档:kubectl-expose.

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-26
    • 2021-02-24
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多