Uploaded image for project: 'Marathon'
  1. Marathon
  2. MARATHON-1687

CNI Applications Aren't Allocated ServicePort

    Details

      Description

      In order to map a marathon task to a service entry in Marathon-LB, it must be allocated a servicePort by Marathon. I have noticed that Marathon is only allocating servicePorts to Docker Containerizer tasks. It is not allocating servicePorts to Unified Containerizer tasks.

      As a base case, the the following sample app.json launches a docker containerizer task, which is correctly given a servicePort:

      {
        "id": "docker-task",
        "container": {
          "type": "DOCKER",
          "docker": {
            "image": "nginx",
            "network": "USER",
            "portMappings": [{"containerPort": 80}]
          }
        },
        "ipAddress": {
            "networkName": "dcos"
        }
      }
      

      I see the task's assigned servicePort in its marathon information:

      [vagrant@a1 ~]$ curl m1.dcos:8080/v2/apps/docker-task
      {"app":{"id":"/docker-task","cmd":null,"args":null,"user":null,"env":{},"instances":1,"cpus":1,"mem":128,"disk":0,"gpus":0,"executor":"","constraints":[],"uris":[],"fetch":[],"storeUrls":[],"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":{"type":"DOCKER","volumes":[],"docker":{"image":"nginx","network":"USER","portMappings":[{"containerPort":80,"servicePort":10101,"protocol":"tcp","labels":{}}],"privileged":false,"parameters":[],"forcePullImage":false}},"healthChecks":[],"readinessChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1,"maximumOverCapacity":1},"labels":{},"acceptedResourceRoles":null,"ipAddress":{"groups":[],"labels":{},"discovery":{"ports":[]},"networkName":"dcos"},"version":"2016-10-04T21:10:23.736Z","residency":null,"secrets":{},"taskKillGracePeriodSeconds":null,"versionInfo":{"lastScalingAt":"2016-10-04T21:10:23.736Z","lastConfigChangeAt":"2016-10-04T21:10:23.736Z"},"tasksStaged":0,"tasksRunning":1,"tasksHealthy":0,"tasksUnhealthy":0,"deployments":[],"tasks":[{"id":"docker-task.f74113c8-8a76-11e6-8a4d-70b3d5800001","slaveId":"f4a920f7-29dd-411c-8181-d77d7d92fb0f-S3","host":"192.168.65.111","state":"TASK_RUNNING","startedAt":"2016-10-04T21:10:25.181Z","stagedAt":"2016-10-04T21:10:24.041Z","ports":[],"version":"2016-10-04T21:10:23.736Z","ipAddresses":[{"ipAddress":"9.0.1.130","protocol":"IPv4"}],"appId":"/docker-task"}]}}
      

      When the above application is launched with the necessary HAPROXY_* labels, it works as expected with Marathon-LB.

      However, the following similar Unified Containerizer task is not assigned a servicePort:

      {
        "id": "unified-task",
        "container": {
          "type": "MESOS",
          "docker": {
            "image": "nginx",
            "portMappings": [{"containerPort": 80}]
          }
        },
        "ipAddress": {
            "networkName": "dcos"
        }
      }
      

      No servicePort is assigned:

      [vagrant@a1 ~]$ curl m1.dcos:8080/v2/apps/unified-task
      {"app":{"id":"/unified-task","cmd":null,"args":null,"user":null,"env":{},"instances":1,"cpus":1,"mem":128,"disk":0,"gpus":0,"executor":"","constraints":[],"uris":[],"fetch":[],"storeUrls":[],"backoffSeconds":1,"backoffFactor":1.15,"maxLaunchDelaySeconds":3600,"container":{"type":"MESOS","volumes":[],"docker":{"image":"nginx","credential":null,"forcePullImage":false}},"healthChecks":[],"readinessChecks":[],"dependencies":[],"upgradeStrategy":{"minimumHealthCapacity":1,"maximumOverCapacity":1},"labels":{},"acceptedResourceRoles":null,"ipAddress":{"groups":[],"labels":{},"discovery":{"ports":[]},"networkName":"dcos"},"version":"2016-10-04T21:13:48.557Z","residency":null,"secrets":{},"taskKillGracePeriodSeconds":null,"versionInfo":{"lastScalingAt":"2016-10-04T21:13:48.557Z","lastConfigChangeAt":"2016-10-04T21:13:48.557Z"},"tasksStaged":0,"tasksRunning":1,"tasksHealthy":0,"tasksUnhealthy":0,"deployments":[],"tasks":[{"id":"unified-task.714cab29-8a77-11e6-8a4d-70b3d5800001","slaveId":"f4a920f7-29dd-411c-8181-d77d7d92fb0f-S3","host":"192.168.65.111","state":"TASK_RUNNING","startedAt":"2016-10-04T21:13:51.107Z","stagedAt":"2016-10-04T21:13:48.806Z","ports":[],"version":"2016-10-04T21:13:48.557Z","ipAddresses":[{"ipAddress":"9.0.1.2","protocol":"IPv4"}],"appId":"/unified-task"}]}}
      

      When the above application is launched with the necessary HAPROXY_* labels, it is not mapped to a service in Marathon-LB (since it does not have a servicePort to assign it to.)

      cc: James DeFelice

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                djosborne Dan Osborne
                Reporter:
                djosborne Dan Osborne
                Team:
                Orchestration Team
                Watchers:
                Automation Bot, Deepak Goel, h0tbird, James DeFelice
              • Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: