You also cannot Produce/Consume Program tags, they must be Controller-scoped.
Configuring a tag to be Produced is easy (just set the number of consumers correctly), the producing controller simply throws the tag out onto the network.
Configuring a Consumed tag requires you to supply the name of the producer controller. In order to have a name, that controller must exist in the I/O configuration of the consumer controller. This is different to messaging, in which the CIP comms path can be specified without names, and there is no need to build the I/O configuration completely.
If you are Producing/Consuming UDT tags, then a recent addition (V19 I think), is that you can add a "Connection_Status" member to the tag. This gives good debugging info, because simply using a tag value without knowing it is being updated could be detrimental.