k8s大使入口示例不起作用

时间:2019-12-03 19:36:27

标签: kubernetes

我目前在OSK(卡塔琳娜州)上运行Docker桌面(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

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

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

我的问题是,从哪里开始进行故障排除?我不知道失败在哪里,也不知道如何开始发现问题所在。正确的方向是什么?

1 个答案:

答案 0 :(得分:0)

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

  
      
  • 节点上的Pod可以与所有节点上的所有Pod通信,而无需NAT
  •   
  • 节点上的代理(例如系统守护程序,kubelet)可以与该节点上的所有Pod通信
  •   

因此基本上可以说,由于您的K8s群集位于您的计算机上,因此您可以直接与服务ip“ 10.97.166.229”和POD IP通信。

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

a)尝试直接连接到您的广告连播。您可以通过执行以下命令来获取IP:

kubectl get pod -o wide

b)获取POD的日志并搜索任何错误:

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/