Разобрался с проблемой: у Alertmanager и Prometheus в K8s манифесте добавил аргумент:
...
spec:
containers:
- name: alertmanager
image: prom/alertmanager
args:
- "--config.file=/tmp/alertmanager/config.yml"
- "--storage.path=/tmp/alertmanager/data"
- "--web.external-url=/alertmanager/" # Этот аргумент был нужен
...
Можно указывать как полный URL, так и частичный, как здесь. Такая же строка нужна и для Prometheus.
Для Grafana в файле grafana.ini я раскомментил в блоке [server] строки:
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/
# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
serve_from_sub_path = true
Также в Ingress я убрал строку
nginx.ingress.kubernetes.io/rewrite-target: /. После всех этих действий все 3 приложения открываются в браузере.