Tom*_*omG 3 kubernetes google-kubernetes-engine kubernetes-ingress nginx-ingress
我部署了一个简单的测试ingress
和一个externalName
service
使用kustomize
. 部署工作正常,我得到了预期的结果,但是当describing
它test-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>)
这是什么错误?尽管一切正常,为什么我还是收到它?我在这里缺少什么?
这就是该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 服务将流量定向到外部服务。
归档时间: |
|
查看次数: |
3638 次 |
最近记录: |