1

我正在编写有关创建 Kubernetes 服务以指向大使部署的教程。

教程:https ://www.bogotobogo.com/DevOps/Docker/Docker-Envoy-Ambassador-API-Gateway-for-Kubernetes.php

在运行命令时

curl $(minikube service --url ambassador)/httpbin/ip

我收到错误

curl: (7) Failed to connect to 192.168.99.100 port 30790: Connection refused
curl: (3) <url> malformed 

我实际上可以消除错误

curl: (3) <url> malformed

通过运行

minikube service --url ambassador
http://192.168.99.100:30790

接着

curl http://192.168.99.100:30790/httpbin/ip

我已经尝试过这个答案curl: (7) Failed to connect to 192.168.99.100 port 31591: Connection denied并且这个答案中提到的步骤已经在博客中,它没有工作。

这是来自博客的代码,用于 Ambassador-svc.yaml

---
apiVersion: v1
kind: Service
metadata:
  labels:
    service: ambassador
  name: ambassador
  annotations:
    getambassador.io/config: |
      ---
      apiVersion: ambassador/v0
      kind:  Mapping
      name:  httpbin_mapping
      prefix: /httpbin/
      service: httpbin.org:80
      host_rewrite: httpbin.org
spec:
  type: LoadBalancer
  ports:
  - name: ambassador
    port: 80
    targetPort: 80
  selector:
    service: ambassador

这可能是与VM相关的问题吗?

另外,我尝试先学习教程,但不幸的是,遇到了同样的错误。

让我知道我这边是否还有其他需要。

编辑:

1.正如评论中所问的,这里的输出是

kubectl get pods --namespace=kube-system
NAME                               READY   STATUS    RESTARTS   AGE
coredns-fb8b8dccf-qkxwm            1/1     Running   0          5h16m
coredns-fb8b8dccf-rrn4f            1/1     Running   0          5h16m
etcd-minikube                      1/1     Running   0          5h15m
kube-addon-manager-minikube        1/1     Running   4          5h15m
kube-apiserver-minikube            1/1     Running   0          5h15m
kube-controller-manager-minikube   1/1     Running   0          3h17m
kube-proxy-wfbxs                   1/1     Running   0          5h16m
kube-scheduler-minikube            1/1     Running   0          5h15m
storage-provisioner                1/1     Running   0          5h16m

跑完之后

kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-78f8f67c4d-zqtl2   1/1     Running   0          65s
calico-node-27lcq                          1/1     Running   0          65s
coredns-fb8b8dccf-qkxwm                    1/1     Running   2          22h
coredns-fb8b8dccf-rrn4f                    1/1     Running   2          22h
etcd-minikube                              1/1     Running   1          22h
kube-addon-manager-minikube                1/1     Running   5          22h
kube-apiserver-minikube                    1/1     Running   1          22h
kube-controller-manager-minikube           1/1     Running   0          8m27s
kube-proxy-wfbxs                           1/1     Running   1          22h
kube-scheduler-minikube                    1/1     Running   1          22h
storage-provisioner                        1/1     Running   2          22h
4

2 回答 2

0

这是解决问题的清单:

  1. 您是否创建了至少一个Listener (CRD) ?

    如果您没有创建至少一个侦听器,则边缘堆栈 pod 不会在任何端口上响应请求。因此,按照官方文档中的报告创建Listeners
    对象: https ://www.getambassador.io/docs/edge-stack/latest/tutorials/getting-started/
    请注意,在大使部署中定义的默认端口依次在边缘堆栈pod 是80808443,因此除非您知道自己在做什么,否则请避免更改它们。您可以检查是否使用此命令定义了任何现有的侦听器:kubectl get Listener -n ambassador或者kubectl get Listener您是否错误地使用了默认命名空间。

  2. 您是否定义了至少一个引用大使服务的 LoadBalancer 类型的服务

    通常不需要这样做,因为一旦您在节点上部署了 Ambassador,您应该在命名空间大使中拥有服务边缘堆栈,该服务边缘堆栈配置为LoadBalancer,因此它会公开 30000-32767 范围内的一些端口并将流量重定向到80808443 . 如果您手动创建了LoadBalancer类型的服务,请确保在porttargetPort字段中使用正确的端口。端口是边缘堆栈使用的端口默认为80808443的部署)

  3. 检查边缘堆栈pod 是否响应其端口上的请求

    最简单的方法是使用 Kubernetes 或您的云提供商的基于 Web 的 UI,并在边缘堆栈pod 中执行 bash。使用默认的 Kubernates 仪表板,您只需到达 pod,单击垂直的三个点 -> Exec。

    如果你在本地运行 Ambassador,你可以使用eval $(minikube docker-env),搜索相关容器,docker ps | grep edge-stack一旦你得到它的 id,你就可以使用命令执行 bashdocker exec -it <id> bash

    最后运行curl -Lki http://127.0.0.1:8080

    你应该得到这样的东西:

    HTTP/1.1 404 Not Found
    date: Tue, XX Xxx XXXX XX:XX:XX XXX
    server: envoy
    content-length: 0

    如果 curl 得到响应而不是“连接被拒绝”,则服务在 pod 上成功运行,并且问题必须在服务、部署或侦听器配置中。您可以尝试使用服务边缘堆栈的集群 IP而不是 127.0.0.1,但您需要从不同于边缘堆栈的 pod 运行 curl 命令。您可以使用自己的 pod 或 exec 进入其他大使 pod,它们是:edge-stack-agentedge-stack-redis

于 2021-10-26T17:58:40.753 回答
0

kubectl get pods --namespace=kube-system应该有网络服务 pod

因此,您尚未设置用于 DNS 的网络策略。

通过使用命令尝试使用网络策略 Calico

kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml

现在检查kubectl get pods --namespace=kube-system

你应该得到这样的输出: -

NAMESPACE    NAME                                       READY  STATUS   RESTARTS  AGE
kube-system  calico-kube-controllers-6ff88bf6d4-tgtzb   1/1    Running  0         2m45s
kube-system  calico-node-24h85                          1/1    Running  0         2m43s
kube-system  coredns-846jhw23g9-9af73                   1/1    Running  0         4m5s
kube-system  coredns-846jhw23g9-hmswk                   1/1    Running  0         4m5s
kube-system  etcd-jbaker-1                              1/1    Running  0         6m22s
kube-system  kube-apiserver-jbaker-1                    1/1    Running  0         6m12s
kube-system  kube-controller-manager-jbaker-1           1/1    Running  0         6m16s
kube-system  kube-proxy-8fzp2                           1/1    Running  0         5m16s
kube-system  kube-scheduler-jbaker-1                    1/1    Running  0         5m41s
于 2019-06-18T05:51:30.973 回答