【问题标题】:k8s ambassador ingress sample not workingk8s 大使入口样本不工作
【发布时间】:2019-12-04 05:48:41
【问题描述】:

我目前在 OSX (Catalina) 上使用 Docker Desktop (19.03.5) 运行 k8s (v.14.8)

按照ambassador getting started 的文章,我做了以下工作:

创建了一个名为ambassador-ingress.yaml的文件

---
apiVersion: v1
kind: Service
metadata:
  labels:
    service: ambassador
  name: ambassador
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
  selector:
    service: ambassador
---
apiVersion: v1
kind: Service
metadata:
  name: google
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v0
      kind:  Mapping
      name:  google_mapping
      prefix: /google/
      service: https://google.com:443
      host_rewrite: www.google.com
spec:
  type: ClusterIP
  clusterIP: None

我已经运行了以下

$ kubectl apply -f https://www.getambassador.io/yaml/ambassador/ambassador-rbac.yaml
$ kubectl apply -f ambassador-ingress.yaml

我现在可以查看kubectl get podskubectl get service

$ kubectl get pods
NAME                                         READY   STATUS    RESTARTS   AGE
ambassador-74fb8f5668-2b85z                  1/1     Running   0          20m
ambassador-74fb8f5668-r6jrf                  1/1     Running   0          20m
ambassador-74fb8f5668-vrmjg                  1/1     Running   0          20m
$ kubectl get service
NAME                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
ambassador           LoadBalancer   10.97.166.229    localhost     80:31327/TCP     18m
ambassador-admin     NodePort       10.96.1.56       <none>        8877:30080/TCP   18m
google               ClusterIP      None             <none>        <none>           18m
kubernetes           ClusterIP      10.96.0.1        <none>        443/TCP          13d

一切看起来都设置正确,但是,每当我尝试 curl k8s 时,即使我可以直接点击 google,我也只能得到一个空的服务器响应:

$ curl localhost/google/
> curl: (52) Empty reply from server
$ curl www.google.com
> <!doctype html> ............

我的问题是,我从哪里开始排除故障?我不知道失败在哪里,也不知道如何开始挖掘以找出问题所在。正确的方向是什么?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    基于“Kubernetes 网络模型”[1] 有 2 条重要规则:

    • 一个节点上的 Pod 可以在没有 NAT 的情况下与所有节点上的所有 Pod 通信
    • 节点上的代理(例如系统守护进程、kubelet)可以与该节点上的所有 pod 通信

    所以基本上它说由于你的K8s集群位于你的机器上,你可以直接与服务ip“10.97.166.229”和POD IP通信。

    因此,关于如何开始您的故障排除步骤,由于您的 POD 已启动并正在运行,这很可能是网络错误。你可以试试这个:

    a) 尝试直接连接到您的 pod。你可以通过执行命令获取你的IP:

    kubectl get pod -o wide
    

    b) 获取您的 POD 的 LOG 并搜索任何错误:

    kubectl logs ambassador-74fb8f5668-2b85z
    

    c) 进入您的 POD 并检查您是否可以测试您的 POD 内部的连接性。 [2]

    kubectl exec -it ambassador-74fb8f5668-2b85z -- /bin/bash
    

    [1]https://kubernetes.io/docs/concepts/cluster-administration/networking/

    [2]https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      相关资源
      最近更新 更多