This seems to work, for some odd reason. The spec attribute should not be an array, because each Pod only has a single spec property. However, it appears that Terraform treats the spec property as an array, and therefore you must index into it. Seems like a bug to me.
The hashicorp/kubernetes provider seems to declare spec as being a list:
Therefore it’s correct that you would need to access specific elements of the list, but I agree it’s odd for this to be defined as a list if there is always exactly one element.
I expect this is a historical holdover from older versions of the provider that were built for earlier versions of Terraform that didn’t support single-instance nested block types yet. You could share this feedback with the provider development team by opening a feature request issue in their GitHub repository, although I think changing this would be a breaking change for existing users and so the provider team probably cannot change it immediately.
Incidentally, I think onecan potentially work for this situation, if spec is defined as always having exactly one element, but the one would need to be applied to the spec attribute directly, like this:
In this case though it’s shorter to just use  as you showed in your second comment, because you know there will always be one element present. one is intended for situations where a list might have either zero or one elements, to avoid an error in the case where there are zero elements.