The 8.x client refuses a 7.x cluster, deliberately

The official clients check a product header and refuse to talk to anything that is not the version they expect, which makes a rolling upgrade a coordinated one.

// the 8.x PHP client against a 7.17 cluster:
// "The client noticed that the server is not a supported
//  distribution of Elasticsearch"

// so the order is fixed:
//   1. upgrade the cluster 7.x → 7.17 (the bridge release)
//   2. upgrade the cluster 7.17 → 8.x
//   3. THEN upgrade the client

// and 7.17 is the only version that can be upgraded from
// directly, which makes it a required stop.

The version check is a deliberate incompatibility rather than a technical one and it removes the usual option of upgrading the client first to smooth the transition. Combined with the required stop at 7.17, the upgrade becomes a sequence with no shortcuts — which is worth planning before starting rather than discovering at step two.