-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
multicluster doesn't work on EKS #4582
Comments
Add a note warning users that `multicluster` does not yet work with on Amazon EKS.
The problem is related to this code where we translate the remote service load balancer state to a local endpoint: linkerd2/controller/cmd/service-mirror/cluster_watcher.go Lines 1122 to 1128 in f01bcfe
There are at least two problems here:
In order to handle this case, we'll need to resolve the remote |
In Istio they use the |
I did a bit of thinking around this one and here is one potential solution. I might be way off here so correct me if I am wrong. Not sure how feasible it is. I was reviewing #4563 and it occurred to me that EndpointsSlices have all the bells to express what we want. How about the following.. In a scenario where we do not have to have endpoints separately defined on each mirror service (as described in #4535 ), we can have one gateway mirror service that has all the traffic flowing through it. This service mirror can have one endpoints slice that might look like this in the case where we have an LB with a concrete IPv4 address: apiVersion: discovery.k8s.io/v1beta1
kind: EndpointSlice
metadata:
name: gateway-mirror-endpoints
labels:
kubernetes.io/service-name: gateway-mirror
addressType: IPv4
ports:
- name: http
protocol: TCP
port: 80
endpoints:
- addresses:
- "10.1.2.3"
conditions:
ready: true and like this in the case where we do not have an IP (EKS) apiVersion: discovery.k8s.io/v1beta1
kind: EndpointSlice
metadata:
name: gateway-mirror-endpoints
labels:
kubernetes.io/service-name: gateway-mirror
addressType: FQDN
ports:
- name: http
protocol: TCP
port: 80
endpoints:
- addresses:
- "some.fqdn.com"
conditions:
ready: true This way we have a perfectly valid way to express the either/or situation that is not valid with EndpointsSubsets. We need to change the destinations service for this purpose and its API. Namely we cna change
Now when the proxy receives a @adleong @olix0r @grampelberg WDYT. Does that sound plausible? |
@zaharidichev you can't run a k8s version that has |
Fixes #4582 When a target cluster gateway is exposed as a hostname rather than with a fixed IP address, the service mirror controller fails to create mirror services and gateway mirrors for that gateway. This is because we only look at the IP field of the gateway service. We make two changes to address this problem: First, when extracting the gateway spec from a gateway that has a hostname instead of an IP address, we do a DNS lookup to resolve that hostname into an IP address to use in the mirror service endpoints and gateway mirror endpoints. Second, we schedule a repair job on a regular (1 minute) to update these endpoint objects. This has the effect of re-resolving the DNS names every minute to pick up any changes in DNS resolution. Signed-off-by: Alex Leong <alex@buoyant.io>
When attempting to link a source cluster to a target EKS cluster using the
linkerd multicluster link
command, the service mirror controller in the source cluster logs this error:and fails to create the endpoints object for the gateway mirror.
This happens because the service mirror controller attempts to copy the
hostname
andIP
fields from the gateway service's ingress struct to the EndpointAddress struct of the gateway mirror's endpoints object. In EKS, the ingress struct of thelinkerd-gateway
service is populated with ahostname
and noIP
. However, theIP
field of EndpointAddress is mandatory.The text was updated successfully, but these errors were encountered: