Я пытаюсь установить успешную связь между моей топологией min inet по умолчанию и контроллером ryu, работающим на docker контейнерах и управляемым с помощью kubernetes. У меня есть kubemaster и два kubenodes, и я использовал Flannel для настройки сети Pod. Прилагается диаграмма топо.
Kubemaster VM [Ubuntu 16.04 ] имеет два интерфейса, оба с режимом Promiscuous, для которого установлено значение Разрешить All-Bridge адаптер - 10.0.0.141/24 Адаптер только для хоста - 192.168.56.10/24
Виртуальная машина Kubenode1 [Ubuntu 16.04] имеет два интерфейса, оба с Promiscuous режим установлен на Allow All-Bridge адаптер - 10.0.0.178/24 Host only адаптер - 192.168.56.20/24
Kubenode2 VM [Ubuntu 16.04] имеет два интерфейса, оба с разнородным режимом, установленным на Allow All-Bridge адаптер - 10.0.0.10/24 Адаптер только для хоста - 192.168.56.30/24
Ниже приведены мои реплики и файлы службы yaml.
Replica.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: pod-replica
namespace: pod-replica
labels:
app: sdn-controller
spec:
replicas: 3
selector:
matchLabels:
app: sdn-controller
template:
metadata:
name: pod-replica
labels:
app: sdn-controller
spec:
containers:
- name: sdn-controller
image: osrg/ryu
command: ['/bin/bash', '-c']
args:
- while true; do
echo Hi, I am RYU Replica!;
sleep 2;
done
ports:
- containerPort: 6653
Service.yaml
kind: Service
apiVersion: v1
metadata:
name: service-nodeport
namespace: pod-replica
spec:
type: NodePort
selector:
app: sdn-controller
ports:
- nodePort: 32102
protocol: TCP
port: 6653
targetPort: 6653
Контейнерных модулей в пространстве имен под-реплик:
container@kubemaster:~$ sudo kubectl get pods -n pod-replica -o wide
[sudo] password for container:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
pod-replica-8qw4s 1/1 Running 0 32m 192.168.2.5 kubenode2 <none>
pod-replica-v228f 1/1 Running 0 29m 192.168.2.6 kubenode2 <none>
pod-replica-vgfbm 1/1 Running 0 32m 192.168.1.4 kubenode1 <none>
Все узлы кластера :
container@kubemaster:~$ sudo kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kubemaster Ready master 123m v1.12.7 10.0.0.141 <none> Ubuntu 16.04.6 LTS 4.15.0-45-generic docker://18.6.1
kubenode1 Ready <none> 122m v1.12.7 10.0.0.178 <none> Ubuntu 16.04.6 LTS 4.15.0-45-generic docker://18.6.1
kubenode2 Ready <none> 122m v1.12.7 10.0.0.10 <none> Ubuntu 16.04.6 LTS 4.15.0-45-generic docker://18.6.1
Сведения о сервисе:
container@kubemaster:~$ sudo kubectl describe service service-nodeport -n pod-replica
Name: service-nodeport
Namespace: pod-replica
Labels: <none>
Annotations: <none>
Selector: app=sdn-controller
Type: NodePort
IP: 10.98.167.121
Port: <unset> 6653/TCP
TargetPort: 6653/TCP
NodePort: <unset> 32102/TCP
Endpoints: 192.168.1.4:6653,192.168.2.5:6653,192.168.2.6:6653
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
Детали одного из модулей:
container@kubemaster:~$ sudo kubectl exec pod-replica-vgfbm -n pod-replica -- printenv | grep SERVICE
SERVICE_NODEPORT_PORT_6653_TCP_PORT=6653
SERVICE_NODEPORT_PORT_6653_TCP_ADDR=10.98.167.121
KUBERNETES_SERVICE_PORT=443
SERVICE_NODEPORT_SERVICE_HOST=10.98.167.121
SERVICE_NODEPORT_PORT=tcp://10.98.167.121:6653
SERVICE_NODEPORT_PORT_6653_TCP=tcp://10.98.167.121:6653
SERVICE_NODEPORT_PORT_6653_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
SERVICE_NODEPORT_SERVICE_PORT=6653
KUBERNETES_SERVICE_HOST=10.96.0.1
По умолчанию min inet topo, запущенная на kubemaster VM:
container@kubemaster:~$ sudo mn
[sudo] password for container:
*** No default OpenFlow controller found for default switch!
*** Falling back to OVS Bridge
*** Creating network
*** Adding controller
*** Adding hosts:
h1 h2
*** Adding switches:
s1
*** Adding links:
(h1, s1) (h2, s1)
*** Configuring hosts
h1 h2
*** Starting controller
*** Starting 1 switches
s1 ...
*** Starting CLI:
mininet>
mininet> sh ovs-vsctl set-controller s1 tcp:10.98.167.121:6653 tcp:10.98.167.121:32102
mininet> sh ovs-vsctl set bridge s1 protocols=OpenFlow10
mininet>
mininet> sh ovs-vsctl show
d4ab3625-78e5-491c-814b-844090a0abeb
Bridge "s1"
Controller "tcp:10.98.167.121:6653"
Controller "tcp:10.98.167.121:32102"
fail_mode: standalone
Port "s1-eth1"
Interface "s1-eth1"
Port "s1"
Interface "s1"
type: internal
Port "s1-eth2"
Interface "s1-eth2"
ovs_version: "2.5.5"
Пример pod-контроллера ryu:
container@kubenode1:~$ sudo docker exec -ti c28e32ad535c /bin/bash
root@pod-replica-vwwr4:~# ryu-manager
loading app ryu.controller.ofp_handler
instantiating app ryu.controller.ofp_handler of OFPHandler
ВОПРОС- Мой min inet запущен на виртуальной машине kubemaster, и я устанавливаю IP-адрес контроллера на сервисный IP, но это не так Не показывать соединение: верно. Как мне встать на успешную сеть в этом сценарии?