Оба экземпляра EC2 запускают контейнер Docker внутри экземпляра. Экземпляр основной службы имеет общедоступный IP-адрес и запускает приложение Java в контейнере, который работает на порту 8000. Экземпляр службы данных имеет только частный IP-адрес и запускает сервер ArangoDB на порту 8529 в контейнере, который работает на порту 8002. Мой Цель состоит в том, чтобы подключиться к ArangoDB, работающему внутри контейнера Docker в службе данных, из приложения Java, работающего в основной службе. Ниже приведен мой Java-код:
Код: Выделить всё
public static ArangoDB getArangoDB(AQLServerConnection aqlServerConnection) throws Exception {
String address = aqlServerConnection.getHost() + ":" + aqlServerConnection.getPort();
//port used for connection: 8529
try {
ArangoDB arangoDB = new ArangoDB.Builder()
.host(aqlServerConnection.getHost(), aqlServerConnection.getPort())
.user(aqlServerConnection.getUsername())
.password(aqlServerConnection.getPassword())
.build();
return arangoDB;
} catch (Exception e) {
throw e;
}
}
Data-service.yaml
Код: Выделить всё
docker run -d --restart always --network host -p 8000:8000 -p 8002:8002 -p 8529:8529 \
-v /var/run/docker.sock:/var/run/docker.sock --log-driver=awslogs \
-e IB_SERVICE_DEPLOYMENT_TYPE=AWS_EC2 -e IS_PRIVATE_SUBNET=true \
${Repository}/dataservice-${Architecture}:latest
Код: Выделить всё
Resources:
MainServiceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: MainServiceSecurityGroup
VpcId: !Ref VPC
GroupDescription: Allows access from anywhere to the Main Service
SecurityGroupIngress:
- IpProtocol: tcp
ToPort: 8000
FromPort: 8000
CidrIp: 0.0.0.0/0
Tags:
- {Key: Name, Value: !Sub 'MainServiceSecurityGroup-${StackName}'}
DataServiceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: DataServiceSecurityGroup
VpcId: !Ref VPC
GroupDescription: Allows only the Main-Service to access the services
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 8002
ToPort: 8002
SourceSecurityGroupId: !Ref IBMainServiceSecurityGroup
- IpProtocol: tcp
FromPort: 8529
ToPort: 8529
SourceSecurityGroupId: !Ref MainServiceSecurityGroup
Код: Выделить всё
com.arangodb.ArangoDBException: Cannot contact any host!
at com.arangodb.internal.net.FallbackHostHandler.get(FallbackHostHandler.java:57) ~[core-7.1.0.jar:7.1.0]
at com.arangodb.internal.net.DirtyReadHostHandler.get(DirtyReadHostHandler.java:52) ~[core-7.1.0.jar:7.1.0]
at com.arangodb.http.HttpCommunication.execute(HttpCommunication.java:101) ~[http-protocol-7.1.0.jar:7.1.0]
at com.arangodb.http.HttpCommunication.execute(HttpCommunication.java:66) ~[http-protocol-7.1.0.jar:7.1.0]
at com.arangodb.http.HttpProtocol.execute(HttpProtocol.java:44) ~[http-protocol-7.1.0.jar:7.1.0]
at com.arangodb.internal.ArangoExecutorSync.execute(ArangoExecutorSync.java:60) ~[core-7.1.0.jar:7.1.0]
at com.arangodb.internal.ArangoExecutorSync.execute(ArangoExecutorSync.java:52) ~[core-7.1.0.jar:7.1.0]
< strong>Main-service.yaml
Код: Выделить всё
docker run --stop-timeout 45 -d --restart always --network host -p 8000:8000 -p 8529:8529 \
${Repository}/mainserver-${Architecture}:latest
Код: Выделить всё
Resources:
MainServiceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: MainServiceSecurityGroup
VpcId: !Ref VPC
GroupDescription: Allows access from anywhere to the Main Service
SecurityGroupIngress:
- IpProtocol: tcp
ToPort: 8000
FromPort: 8000
CidrIp: 0.0.0.0/0
- IpProtocol: tcp
FromPort: 8529
ToPort: 8529
CidrIp: 0.0.0.0/0
Tags:
- {Key: Name, Value: !Sub 'MainServiceSecurityGroup-${StackName}'}
DataServiceSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupName: DataServiceSecurityGroup
VpcId: !Ref VPC
GroupDescription: Allows only the Main-Service to access the services
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 8002
ToPort: 8002
SourceSecurityGroupId: !Ref IBMainServiceSecurityGroup
- IpProtocol: tcp
FromPort: 8529
ToPort: 8529
SourceSecurityGroupId: !Ref MainServiceSecurityGroup
[*]Да мой подход неверен?
[*]Могу ли я избежать сопоставления порта 8529 на уровне экземпляра основной службы?
[*]Есть ли обходной путь?
Подробнее здесь: https://stackoverflow.com/questions/787 ... oudformati