Skip to content

Commit 621423f

Browse files
authored
Add ipsec package to image release 1.11 (#2618)
* support ipsec
1 parent 9c80381 commit 621423f

File tree

2 files changed

+110
-3
lines changed

2 files changed

+110
-3
lines changed

dist/images/Dockerfile.base

+4-3
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,16 @@ RUN mkdir /packages/ && \
7272
cp /usr/src/openvswitch-*.deb /packages && \
7373
cp /usr/src/python3-openvswitch*.deb /packages && \
7474
cp /usr/src/ovn-*.deb /packages && \
75-
cd /packages && rm -f *dbg* *datapath* *docker* *vtep* *ipsec* *test* *dev*
75+
cd /packages && rm -f *dbg* *datapath* *docker* *vtep* *test* *dev*
7676

7777
FROM ubuntu:22.04
7878

7979
ARG DEBIAN_FRONTEND=noninteractive
8080
RUN apt update && apt upgrade -y && apt install ca-certificates python3 hostname libunwind8 netbase \
8181
ethtool iproute2 ncat libunbound-dev procps libatomic1 kmod iptables \
8282
tcpdump ipset curl uuid-runtime openssl inetutils-ping arping ndisc6 \
83-
logrotate dnsutils net-tools -y --no-install-recommends && \
83+
logrotate dnsutils net-tools strongswan strongswan-pki libcharon-extra-plugins \
84+
libcharon-extauth-plugins libstrongswan-extra-plugins libstrongswan-standard-plugins -y --no-install-recommends && \
8485
rm -rf /var/lib/apt/lists/* && \
8586
cd /usr/sbin && \
8687
ln -sf /usr/sbin/iptables-legacy iptables && \
@@ -103,8 +104,8 @@ RUN curl -L https://dl.k8s.io/${KUBE_VERSION}/kubernetes-client-linux-${ARCH}.ta
103104

104105
RUN --mount=type=bind,target=/packages,from=ovs-builder,source=/packages \
105106
dpkg -i /packages/libopenvswitch*.deb && \
106-
dpkg -i /packages/openvswitch-*.deb && \
107107
dpkg -i /packages/python3-openvswitch*.deb && \
108+
dpkg -i /packages/openvswitch-*.deb && \
108109
dpkg -i --ignore-depends=openvswitch-switch,openvswitch-common /packages/ovn-*.deb && \
109110
mv /usr/lib/python3.7/dist-packages/ovs /usr/lib/python3/dist-packages/ && \
110111
rm -rf /var/lib/openvswitch/pki/

dist/images/ipsec.sh

+106
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#!/bin/bash
2+
set -euo pipefail
3+
4+
OVN_NB_POD=
5+
6+
showHelp(){
7+
echo "sh ipsec.sh [init|start|stop|status]"
8+
}
9+
10+
getOvnCentralPod(){
11+
NB_POD=$(kubectl get pod -n kube-system -l ovn-nb-leader=true | grep ovn-central | head -n 1 | awk '{print $1}')
12+
if [ -z "$NB_POD" ]; then
13+
echo "nb leader not exists"
14+
exit 1
15+
fi
16+
OVN_NB_POD=$NB_POD
17+
}
18+
19+
initIpsec (){
20+
podNames=`kubectl get pod -n kube-system -l app=ovs -o 'jsonpath={.items[*].metadata.name}'`
21+
for pod in $podNames; do
22+
caPod=$pod
23+
break
24+
done
25+
26+
echo " Initing CA $caPod "
27+
kubectl exec -it $caPod -n kube-system -- ovs-pki init --force > /dev/null
28+
29+
for pod in $podNames; do
30+
echo " Initing privkey,req,cert file on pod $pod "
31+
systemId=$(kubectl exec -it ${pod} -n kube-system -- ovs-vsctl get Open_vSwitch . external_ids:system-id | tr -d '"' | tr -d '\r')
32+
33+
kubectl exec -it $pod -n kube-system -- ovs-pki req -u $systemId --force > /dev/null
34+
kubectl exec -it $pod -n kube-system -- mv "${systemId}-privkey.pem" /etc/ipsec.d/private/
35+
kubectl exec -it $pod -n kube-system -- mv "${systemId}-req.pem" /etc/ipsec.d/reqs/
36+
37+
if [[ $pod == $caPod ]]; then
38+
kubectl exec -it $pod -n kube-system -- rm -f "/etc/ipsec.d/reqs/${systemId}-cert.pem" > /dev/null
39+
kubectl exec -it $pod -n kube-system -- ovs-pki sign -b "/etc/ipsec.d/reqs/${systemId}" switch > /dev/null
40+
kubectl exec -it $pod -n kube-system -- mv "/etc/ipsec.d/reqs/${systemId}-cert.pem" /etc/ipsec.d/certs/
41+
kubectl exec -it $pod -n kube-system -- cp /var/lib/openvswitch/pki/switchca/cacert.pem /etc/ipsec.d/cacerts/ > /dev/null
42+
else
43+
kubectl cp "${pod}:/etc/ipsec.d/reqs/${systemId}-req.pem" "${systemId}-req.pem" -n kube-system > /dev/null
44+
kubectl cp "${systemId}-req.pem" "${caPod}:/kube-ovn/" -n kube-system > /dev/null
45+
# ovs-pki sign do not have options --force so rm cert first
46+
kubectl exec -it $caPod -n kube-system -- rm -f "/kube-ovn/${systemId}-cert.pem"
47+
kubectl exec -it $caPod -n kube-system -- ovs-pki sign -b ${systemId} switch > /dev/null
48+
kubectl cp "${caPod}:/kube-ovn/${systemId}-cert.pem" "${systemId}-cert.pem" -n kube-system > /dev/null
49+
kubectl cp "${systemId}-cert.pem" "${pod}:/etc/ipsec.d/certs/" -n kube-system > /dev/null
50+
51+
kubectl cp "${caPod}:/var/lib/openvswitch/pki/switchca/cacert.pem" cacert.pem -n kube-system > /dev/null
52+
kubectl cp cacert.pem "${pod}:/etc/ipsec.d/cacerts/" -n kube-system > /dev/null
53+
54+
# clean temp files
55+
kubectl exec -it $caPod -n kube-system -- rm -f "/kube-ovn/${systemId}-req.pem"
56+
kubectl exec -it $caPod -n kube-system -- rm -f "/kube-ovn/${systemId}-cert.pem"
57+
rm -f ${systemId}-req.pem
58+
rm -f ${systemId}-cert.pem
59+
rm -f cacert.pem
60+
fi
61+
62+
kubectl exec -it $pod -n kube-system -- ovs-vsctl set Open_vSwitch . \
63+
other_config:certificate=/etc/ipsec.d/certs/"${systemId}-cert.pem" \
64+
other_config:private_key=/etc/ipsec.d/private/"${systemId}-privkey.pem" \
65+
other_config:ca_cert=/etc/ipsec.d/cacerts/cacert.pem
66+
done
67+
68+
echo " Enabling ovn ipsec "
69+
kubectl ko nbctl set nb_global . ipsec=true
70+
71+
for pod in $podNames; do
72+
echo " Starting pod ${pod} ipsec service"
73+
kubectl exec -it -n kube-system $pod -- service openvswitch-ipsec restart > /dev/null
74+
kubectl exec -it -n kube-system $pod -- service ipsec restart > /dev/null
75+
done
76+
77+
echo " Kube-OVN ipsec init successfully, it may take a few seconds to setup ipsec completely "
78+
}
79+
80+
getOvnCentralPod
81+
subcommand="$1"; shift
82+
83+
case $subcommand in
84+
init)
85+
initIpsec
86+
;;
87+
start)
88+
kubectl exec "$OVN_NB_POD" -n kube-system -c ovn-central -- ovn-nbctl set nb_global . ipsec=true
89+
echo " Kube-OVN ipsec started "
90+
;;
91+
stop)
92+
kubectl exec "$OVN_NB_POD" -n kube-system -c ovn-central -- ovn-nbctl set nb_global . ipsec=false
93+
echo " Kube-OVN ipsec stopped "
94+
;;
95+
status)
96+
podNames=`kubectl get pod -n kube-system -l app=ovs -o 'jsonpath={.items[*].metadata.name}'`
97+
for pod in $podNames; do
98+
echo " Pod {$pod} ipsec status..."
99+
kubectl exec -it $pod -n kube-system -- ovs-appctl -t ovs-monitor-ipsec tunnels/show
100+
done
101+
;;
102+
*)
103+
showHelp
104+
exit 1
105+
;;
106+
esac

0 commit comments

Comments
 (0)