У нас есть sctp java-приложение (сервер), работающее в контейнере (pod).Мы хотим выставить это приложение sctp для внешних сетей (Клиент), используя Nodeport.Мы используем последнюю версию Kubernetes 1.14.3 с версией докера 18.06.
Java-код для SERVER (работает в модуле):
SocketAddress serverSocketAddress = new InetSocketAddress(30030);
SctpServerChannel sctpServerChannel = SctpServerChannel.open().bind(serverSocketAddress);
SctpChannel sctpChannel;
while ((sctpChannel = sctpServerChannel.accept()) != null)
{
MessageInfo messageInfo = sctpChannel.receive(ByteBuffer.allocate(64000) , null, null);
}
config.yaml:
kind: ClusterConfiguration
kubernetesVersion: v1.14.3
networking:
podSubnet: 192.168.0.0/16
apiServer:
extraArgs:
feature-gates: SCTPSupport=true
развертывание yaml:
apiVersion: v1
kind: Service
metadata:
name: sctpserver
labels:
app: testsctp
spec:
ports:
- name: sctpserver
protocol: SCTP
port: 30030
targetPort: 'sctpserver'
nodePort: 30030
selector:
app: testsctp
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sctpserver
labels:
app: testsctp
spec:
selector:
matchLabels:
app: testsctp
strategy:
type: Recreate
template:
metadata:
labels:
app: testsctp
spec:
containers:
- image: sctpserver:latest
imagePullPolicy: IfNotPresent
name: sctpserver
ports:
- containerPort: 30030
hostPort: 30030
name: sctpserver
protocol: SCTP
Мы видим INIT (из внешней сети) и INIT ACK (с сервера kubernetes) в wireshark, но не более того.Пакеты данных не передаются от хоста к контейнеру и наоборот.
В настоящее время используется Iptables, но используется режим kube-proxy с ipvs в файле конфигурации, и результат остается тем же.