找不到 k8sExternalName 端点 - 但正在工作

Tom*_*omG 3 kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress

我部署了一个简单的测试ingress和一个externalName service使用kustomize. 部署工作正常,我得到了预期的结果,但是当describingtest-ingress显示错误时:<error: endpoints "test-external-service" not found>。看起来像是 k8s 的 bug。它显示此错误,但一切正常。

这是我的部署:

kustomization.yaml:

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: platform
resources:
  - test-ingress.yaml
  - test-service.yaml
generatorOptions:
  disableNameSuffixHash: true
Run Code Online (Sandbox Code Playgroud)

test-service.yaml:

apiVersion: v1
kind: Service
metadata:
  name: test-external-service
  namespace: platform
spec:
  type: ExternalName
  externalName: "some-working-external-elasticsearch-service"
Run Code Online (Sandbox Code Playgroud)

test-ingress.yaml:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    kubernetes.io/ingress.class: nginx-external
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_cache_bypass $http_upgrade;
spec:
  rules:
    - host: testapi.mydomain.com
      http:
        paths:
          - path: /
            backend:
              serviceName: test-external-service
              servicePort: 9200
Run Code Online (Sandbox Code Playgroud)

在这里,我将外部服务连接到工作elasticsearch服务器。当浏览到testapi.mydomain.com(“mydomain”当然被我们的真实域替换)时,我得到了众所周知的预期elasticsearch结果:

{
  "name" : "73b40a031651",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "Xck-u_EFQ0uDHJ1MAho4mQ",
  "version" : {
    "number" : "7.10.1",
    "build_flavor" : "oss",
    "build_type" : "docker",
    "build_hash" : "1c34507e66d7db1211f66f3513706fdf548736aa",
    "build_date" : "2020-12-05T01:00:33.671820Z",
    "build_snapshot" : false,
    "lucene_version" : "8.7.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
Run Code Online (Sandbox Code Playgroud)

所以一切正常。但是在描述的时候test-ingress,却出现了如下错误:

test-external-service:9200 (<error: endpoints "test-external-service" not found>)

这是什么错误?尽管一切正常,为什么我还是收到它?我在这里缺少什么?

mat*_*t_j 6

这就是该kubectl describe ingress命令的工作原理。
kubectl describe ingress命令调用describeIngressV1beta1函数,该函数调用describeBackendV1beta1函数来描述后端。

从源代码中可以发现,describeBackendV1beta1函数查找与后端服务关联的端点,如果找不到合适的端点,则会生成一条错误消息(如您​​的示例所示):

func (i *IngressDescriber) describeBackendV1beta1(ns string, backend *networkingv1beta1.IngressBackend) string {
    endpoints, err := i.client.CoreV1().Endpoints(ns).Get(context.TODO(), backend.ServiceName, metav1.GetOptions{})
    if err != nil {
        return fmt.Sprintf("<error: %v>", err)
    }
...
Run Code Online (Sandbox Code Playgroud)

集成外部服务文档中,您可以发现ExternalName服务没有任何定义的端点:

ExternalName 服务没有选择器,也没有任何定义的端口或端点,因此,您可以使用ExternalName 服务将流量定向到外部服务。