What you need is something called "Boehm's algorithm" (after its originator, Wolfgang Boehm). It has a simple geometric interpretation, and drawing a few pictures should make it clear. There is a pretty good explanation (with pictures) in this document.
The algorithm is based on a process called "knot insertion". You keep inserting knots into the b-spline curve until each knot has multiplicity 3. Then, the b-spline control points of this refined curve give you the Bezier control points of its segments.
So, if you're writing code to do this, one approach is to write a knot insertion function first, and then call it repeatedly.
There is knot insertion code here.
If you insist using uniform knot sequence (which is how you obtain a uniform B-spline curve), then as long as the number of knot values follow the rule: number of knots = number of control points + order, then you should get a closed curve. Note that the number of control points should include those repeated (k-1) control points.
For example, if you have a cubic B-spline curve with 7 control points $P_0$, $P_1$,...,$P_6$ where $P_4=P_0$, $P_5=P_1$ and $P_6=P_2$, the knot sequence can be (-0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75). Please note that the knot sequence is defined in this way (with negative knots) so that the valid range of the B-spline curve is still [0,1].
If you do not want to use uniform knot sequence, then the knot sequence still needs to follow a specific pattern in order for the curve to become periodic (i.e., closed with certain continuity at the joint). I will not elaborate on this topic here as you do not really need it.
Best Answer
You can construct a closed b-spline curve, as described here.
I don't know if this is the "best" method -- only you can decide what you mean by "best".
If you know the curve normal at each point, then the problem is simpler, but I can't tell whether this is the case, based on the wording of your question.