Found the answer, the name of the kibana service is defined as http, but in fact it should be https.
This is the log I saw from elastic-operator-0. thx
{"log.level":"error","@timestamp":"2021-12-17T02:46:16.934Z","log.logger":"manager.eck-operator.controller.beat-kibana-association-controller","message":"Reconciler error","service.version":"1.9.0+ab86a2b7","service.type":"eck","ecs.version":"1.4.0","name":"filebeat","namespace":"default","error":"no port named [https] in service [default/kibana-two-kb-http]","errorCauses":[{"error":"no port named [https] in service [default/kibana-two-kb-http]"}],"error.stack_trace":"sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).processNextWorkItem\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.9.6/pkg/internal/controller/controller.go:253\nsigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller).Start.func2.2\n\t/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.9.6/pkg/internal/controller/controller.go:214"}