Transparency can be a tricky thing, I fear. In short, and somewhat roughly:
In order for semi-transparent objects to be rendered correctly, they’re generally rendered from furthest to closest, allowing them to overlay each other as expected. However, sorting each individual polygon might be performance-intensive, I think, so instead we simply sort the objects.
But with largish objects, or objects that overlap in awkward ways, which has its origin closest to the camera might change depending on where the camera is. This, I think, may be why your water flickers so: from some positions the water’s origin is further from the camera than the pipe’s, resulting in it being rendered first, and so being visible; from others, the pipe’s origin is further away than the water’s, resulting in it being rendered first, and the water being missed.
The Panda manual gives a more-detailed discussion of this on the following page, I think: https://www.panda3d.org/manual/?title=Transparency_and_Blending
There are a few potential options, at least some of which the above-linked page discusses, I believe.
In your case, as long as the water is never intended to surround the pipe or otherwise cover it, you might get away with simply forcing Panda to render the water first, and then the pipe. This can be done by putting the objects into appropriate culling-bins (or a single bin with a fixed render-order). More information on doing this should be found on the following page, I believe:
https://www.panda3d.org/manual/?title=How_to_Control_Render_Order
Note that with this approach, you’ll likely not see the pipe when looking through the water.