I can confirm solution by tibin_tomy worked for me on Istio 1.7.4. Additionally I used ClusterIP under step 1 instead of NodePort.
Step1 - Change istioingresssgateway service type to ClusterIP (Installing Istio using IstioOperator):
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
namespace: istio-system
name: istio
spec:
profile: default
components:
ingressGateways:
- name: istio-ingressgateway
k8s:
service:
type: ClusterIP # Disable classic load balancer creation (default), routing to here will be done via Kubernetes Ingress resource
NOTE: Deploy "Ingress" in the same namespace as istio-ingressgateway (istio-system by default).
For example if istio-ingressgateway is in namespace istio-system and Ingress is in namespace system, then aws-alb-ingress-controller errors with:
"kubebuilder/controller "msg"="Reconciler error" "error"="failed to
reconcile targetGroups due to failed to load serviceAnnotation due to
no object matching key "system/istio-ingressgateway" in local store"
"controller"="alb-ingress-controller"
"request"={"Namespace":"system","Name":"sonata-ingress"}"