Every app that has an ingress, can be internal or external. Internal apps are only accessible from inside the environment. External apps are accessible from both inside, and outside the environment (defined by the VNET used or public internet if no VNET was set)

External apps are accessible on {appName}.$CONTAINER_APP_ENV_DNS_SUFFIX or {appName}.internal.$CONTAINER_APP_ENV_DNS_SUFFIX

Internal apps are only accessible on {appName}.internal.$CONTAINER_APP_ENV_DNS_SUFFIX

All ingress-enabled apps have an .internal. endpoint by default. While only explicitly external apps will have the external endpoint.

.internal. endpoints are only available to apps inside the environment.

Create an external app

Assuming you have an environment

az containerapp create \
  --name app1 \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT  \
  --image ahmelsayed/test-app:1 \
  --target-port 80 \
  --ingress external \
  --query properties.configuration.ingress.fqdn

app1.mellowmushroom-424ed5ab.westeu.azurecontainerapps.io

Create an internal app

az containerapp create \
  --name app2 \
  --resource-group $RESOURCE_GROUP \
  --environment $CONTAINERAPPS_ENVIRONMENT  \
  --image ahmelsayed/test-app:1 \
  --target-port 80 \
  --ingress internal \
  --query properties.configuration.ingress.fqdn

app2.internal.mellowmushroom-424ed5ab.westeu.azurecontainerapps.io

Accessing apps

for example, to reach app2 from app1 in you can do

curl https://app2.internal.$CONTAINER_APP_ENV_DNS_SUFFIX

or

using HttpClient httpClient = new();
var resp = httpClient.GetAsync($"https://app2.internal.{Environment.GetEnvironmentVariable("CONTAINER_APP_ENV_DNS_SUFFIX")"});

in C# (or other languages, you can create a helper method)

string GetServiceFqdn(string serviceName, bool internal = false)
{
    var suffix = Environment.GetEnvironmentVariable("CONTAINER_APP_ENV_DNS_SUFFIX");

    if string.IsNullOrEmpty(suffix)
    {
        return serviceName;
    }

    return internal
        ? $"{serviceName}.internal.{suffix}"
        : $"{serviceName}.{suffix}";
}


using HttpClient httpClient = new();
var resp = httpClient.GetAsync($"https://{GetServiceFqdn("app2", internal: true)}");