Kubernetes: Ingress: μ—¬λŸ¬ 호슀트 ν—ˆμš©

에 λ§Œλ“  2017λ…„ 03μ›” 24일  Β·  38μ½”λ©˜νŠΈ  Β·  좜처: kubernetes/kubernetes

도움 μš”μ²­μž…λ‹ˆκΉŒ?
μ•„λ‹ˆμš”

이 문제λ₯Ό μ œμΆœν•˜κΈ° 전에 Kubernetes λ¬Έμ œμ—μ„œ μ–΄λ–€ ν‚€μ›Œλ“œλ₯Ό κ²€μƒ‰ν–ˆμŠ΅λ‹ˆκΉŒ?
μˆ˜μ‹  컨트둀러, "호슀트", 닀쀑 호슀트.

https://github.com/kubernetes/ingress/issues/87 μ—μ„œ 이 문제λ₯Ό μ°Ύμ•˜μ§€λ§Œ 잘λͺ»λœ μ €μž₯μ†Œμ— μžˆμ—ˆκΈ° λ•Œλ¬Έμ— λ‹«ν˜”μŠ΅λ‹ˆλ‹€.


이것은 버그 λ³΄κ³ μ„œμž…λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ κΈ°λŠ₯ μš”μ²­μž…λ‹ˆκΉŒ? (ν•˜λ‚˜ 선택):
κΈ°λŠ₯ μš”μ²­

ν˜„μž¬ κ΅¬ν˜„μ—μ„œ λ™μΌν•œ μ„œλΉ„μŠ€λ₯Ό κ°€λ¦¬μΌœμ•Ό ν•˜λŠ” λͺ‡ 개의 ν•˜μœ„/도메인이 μžˆλŠ” 경우 "λ§Žμ€" 쀑볡 μ½”λ“œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ:

spec:
  rules:
  - host: foobar.com
    http:
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80
  - host: api.foobar.com
    http:
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80
  - host: admin.foobar.com
    http:
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80
  - host: status.foobar.com
    http:
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80

κ·Έλž˜μ„œ Host ν•„λ“œκ°€ 단일 FQDNμ—μ„œ FQDN λ°°μ—΄λ‘œ 변경될 것을 μ œμ•ˆν•©λ‹ˆλ‹€.
κ·Έλž˜μ„œ λ‹€μŒκ³Ό 같이 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

spec:
  rules:
  - host: ["foobar.com", "api.foobar.com", "admin.foobar.com", "status.foobar.com"]
    http:
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80

18쀄을 μ ˆμ•½ν•˜κ³  ꡬ성을 더 λͺ…ν™•ν•˜κ²Œ λ§Œλ“­λ‹ˆλ‹€.

https://github.com/kubernetes/kubernetes/issues/41881 의 쀑볡일 μˆ˜λ„ μžˆμ§€λ§Œ κ΅¬ν˜„ν•˜κΈ°κ°€ 더 μ‰¬μš΄ 것 κ°™μŠ΅λ‹ˆλ‹€.

cc @aledbf (당신은 k8s의 이 λΆ€λΆ„μ—μ„œ "일"ν•˜λŠ”μ§€ ν™•μ‹€ν•˜μ§€ μ•Šμ€ λ§ˆμ§€λ§‰ 문제λ₯Ό λ§ˆκ°ν–ˆμŠ΅λ‹ˆλ‹€)

Kubernetes 버전 ( kubectl version ):

Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.4", GitCommit:"7243c69eb523aa4377bce883e7c0dd76b84709a1", GitTreeState:"clean", BuildDate:"2017-03-07T23:53:09Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.4+coreos.0", GitCommit:"97c11b097b1a2b194f1eddca8ce5468fcc83331c", GitTreeState:"clean", BuildDate:"2017-03-08T23:54:21Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}

ν™˜κ²½ :
λ””μ§€ν„Έμ˜€μ…˜, μ½”μ–΄OS.

sinetwork triagunresolved

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

이 κΈ°λŠ₯도 보고 μ‹Άμ§€λ§Œ ν•΄κ²° λ°©λ²•μœΌλ‘œ YAML IDλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€μŒμ€ 주어진 예λ₯Ό μ°ΎλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

spec:
  rules:
  - host: foobar.com
    http: &http_rules
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80
  - host: api.foobar.com
    http: *http_rules
  - host: admin.foobar.com
    http: *http_rules
  - host: status.foobar.com
    http: *http_rules

λͺ¨λ“  38 λŒ“κΈ€

이것도 +1. @klausenbusk 와 μ € λͺ¨λ‘ https://github.com/kubernetes/kubernetes/issues/41881 μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ 이것은 λ¨Ό 길을 갈 κ²ƒμž…λ‹ˆλ‹€.

μ™€μΌλ“œμΉ΄λ“œ λ˜λŠ” ν•˜μœ„ 도메인 μ „μš© μ˜΅μ…˜μ„ μ„ ν˜Έν•˜λ―€λ‘œ host: web.* λ˜λŠ” host: api.web.* λ₯Ό μ§€μ •ν•˜κ³  ν•΄λ‹Ή νŒ¨ν„΄μœΌλ‘œ _μ‹œμž‘_ν•˜λŠ” λͺ¨λ“  ν•­λͺ©μ΄ ν†΅κ³Όν•˜λ„λ‘ ν•˜μ—¬ μ„œλΉ„μŠ€κ°€ μ΅œμ’… 도메인에 λŒ€ν•΄ λ¬΄μ§€ν•˜κ²Œ λ‘‘λ‹ˆλ‹€. ( .example.com ? .prod.example.com ? .beta.example.com ? .it.internal ?μ—μ„œ μ‹€ν–‰ μ€‘μž…λ‹ˆκΉŒ?), κ·ΈλŸ¬λ‚˜ ν˜„μž¬ λͺ¨λ†€λ¦¬μ‹μ„ λ„˜μ–΄μ„œλŠ” 것은 "전체 단일 도메인을 λ‚˜μ—΄ν•΄μ•Ό ν•©λ‹ˆλ‹€. host: μ—μ„œ 큰 μ§„μ „μž…λ‹ˆλ‹€.

개인적으둜 λ‚˜λŠ” λ˜ν•œ μˆ˜μ‹  컨트둀러(일반적으둜 ν΄λŸ¬μŠ€ν„° κ΄€λ¦¬μžκ°€ 배포함)에 "λ‹€μŒ 도메인 λ˜λŠ” κ·Έ ν•˜μœ„ λ„λ©”μΈλ§Œ μ„œλΉ„μŠ€ν•©λ‹ˆλ‹€..."λΌλŠ” μ œν•œμ΄ μžˆμ–΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜μ§€λ§Œ μ΄λŠ” λ³„κ°œμ˜ λ¬Έμ œμž…λ‹ˆλ‹€.

또 λ‹€λ₯Έ +1. μ‚¬μ†Œν•œ 인그레슀 μ‚¬μš© 사둀가 μžˆλŠ” 거의 λͺ¨λ“  μ‚¬λžŒμ΄ 이점을 λˆ„λ¦΄ 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

+1

+1

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

/lifecycle frozen μ£Όμ„μœΌλ‘œ μ΄μŠˆκ°€ μžλ™μœΌλ‘œ λ‹«νžˆμ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•΄λ„ μ•ˆμ „ν•˜λ‹€λ©΄ /close .

sig-testing, kubernetes/test-infra 및/λ˜λŠ” @fejta ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

λΆ„λͺ…νžˆ, λ‚˜λŠ” μ˜€λž˜λœμ—μ„œ 그것을 제거 ν•  수 μ—†μŠ΅λ‹ˆλ‹€ ...

@deitch κ°€ νš¨κ³Όκ°€

이 κΈ°λŠ₯도 보고 μ‹Άμ§€λ§Œ ν•΄κ²° λ°©λ²•μœΌλ‘œ YAML IDλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. λ‹€μŒμ€ 주어진 예λ₯Ό μ°ΎλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

spec:
  rules:
  - host: foobar.com
    http: &http_rules
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80
  - host: api.foobar.com
    http: *http_rules
  - host: admin.foobar.com
    http: *http_rules
  - host: status.foobar.com
    http: *http_rules

λ‚˜λŠ” 이것이 맀우 ν™˜μ˜λ°›μ„ κ²ƒμ΄λΌλŠ” 말 외에 μΆ”κ°€ν•  것이 λ³„λ‘œ μ—†μŠ΅λ‹ˆλ‹€. 베타 API에 λŒ€ν•œ κ·œμΉ™μ΄ μ—¬μ „νžˆ 이λ₯Ό μˆ˜μ •ν•  수 μžˆλŠ” μœ μ—°μ„±μ„ ν—ˆμš©ν•˜κΈ°λ₯Ό λ°”λžλ‹ˆλ‹€.

μ—¬κΈ°μ—μ„œ 동일 - μ—¬λŸ¬ 도메인을 μΆ”κ°€ν•΄μ•Ό ν•©λ‹ˆλ‹€.

*.foobar.com
*.foobar.net
*.foobar.biz

ν˜„μž¬ κ΅¬ν˜„μ—μ„œ μ‹€μ œλ‘œ νŽΈμ•ˆν•˜μ§€ μ•Šμ€ 것은 ...

κ·Έλž˜μ„œ νˆ¬ν‘œλ₯Ό...

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•΄λ„ μ•ˆμ „ν•˜λ‹€λ©΄ /close .

sig-testing, kubernetes/test-infra 및/λ˜λŠ” fejta에 ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

이것은 많이 ν•„μš”ν•©λ‹ˆλ‹€ :((

이 κΈ°λŠ₯에 λŒ€ν•΄ +1μž…λ‹ˆλ‹€.

λ˜ν•œ @kramarzκ°€ μ œμ•ˆν•œ ν•΄κ²° 방법을 μ‹œλ„ν–ˆμ§€λ§Œ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.
Error: YAML parse error on mysite-web/templates/ingress.yaml: error converting YAML to JSON: yaml: line 4: mapping values are not allowed in this context

이 κΈ°λŠ₯에 λŒ€ν•΄ +1μž…λ‹ˆλ‹€.

90일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμ œκ°€ λΆ€μ‹€ν•΄μ§‘λ‹ˆλ‹€.
/remove-lifecycle stale ν•˜μ—¬ 문제λ₯Ό μ΅œμ‹ μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
λΆ€μ‹€ λ¬Έμ œλŠ” μΆ”κ°€λ‘œ 30일 λ™μ•ˆ μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ 썩고 κ²°κ΅­ λ‹«νž™λ‹ˆλ‹€.

이 문제λ₯Ό μ§€κΈˆ μ’…λ£Œν•΄λ„ μ•ˆμ „ν•˜λ‹€λ©΄ /close .

sig-testing, kubernetes/test-infra 및/λ˜λŠ” fejta에 ν”Όλ“œλ°±μ„ λ³΄λ‚΄μ‹­μ‹œμ˜€.
/수λͺ… μ£ΌκΈ° λΆ€μ‹€

/remove-lifecycle λΆ€μ‹€

정말 ν•„μš”ν•œ κΈ°λŠ₯

아직 λ³Έ 적이 μ—†λŠ” μ‚¬μš© μ‚¬λ‘€μž…λ‹ˆλ‹€. api[0-9].domain.io 처럼 λ³΄μ΄λŠ” 일뢀 도메인이 μžˆμŠ΅λ‹ˆλ‹€. κΈ°μ‘΄ μ™€μΌλ“œμΉ΄λ“œ 도메인은 이 경우λ₯Ό 닀루지 μ•ŠμŠ΅λ‹ˆλ‹€. 집합은 yaml IDλ₯Ό μ‚¬μš©ν•˜μ—¬ μˆ˜λ™μœΌλ‘œ 관리할 수 μžˆμ„ 만큼 μΆ©λΆ„νžˆ μž‘μ§€λ§Œ λŒ€μ²΄(예: μ •κ·œμ‹ 도메인 이름)κ°€ ν•„μš”ν•˜μ§€ μ•Šμ€ 경우 μ΄μƒμ μž…λ‹ˆλ‹€.

이 κΈ°λŠ₯이 정말 ν•„μš”ν•©λ‹ˆλ‹€

이 κΈ°λŠ₯에 λŒ€ν•œ 또 λ‹€λ₯Έ νˆ¬ν‘œ

λ²”μœ„ 루프λ₯Ό μ‚¬μš©ν•˜λŠ” 또 λ‹€λ₯Έ ν•΄κ²° 방법:

rules:
          {{- range .Values.ingress.hosts }}
    - host: {{ . }}
      http:
        paths:
          - path: /
            backend:
              serviceName: {{ $fullName }}
              servicePort: 80
              {{- end }}

그리고 κ°’ yamlμ—μ„œ:

ingress:
  hosts:
    - "bla.blub"
    - "foo.bar"

λ³€μˆ˜ fullName을 μ„€μ •ν•˜κ³ ...

μ—¬μ „νžˆ 호슀트 μš”μ†Œμ— λŒ€ν•΄ λ°°μ—΄μ΄λ‚˜ μ •κ·œμ‹ λ˜λŠ” ...λ₯Ό μ„ ν˜Έν•©λ‹ˆλ‹€.

이것은 Ingressμ—μ„œ λ°œμƒν•˜μ§€ μ•ŠλŠ” 것이 거의 ν™•μ‹€ν•˜μ§€λ§Œ APIκ°€ Ingressλ₯Ό λ”°λ₯Ό 수 μžˆλ„λ‘ 염두에 두어야 ν•©λ‹ˆλ‹€(곧 μ œμ•ˆμ΄ μ˜¬κΉŒμš”?)

Ingressλ₯Ό νŒ”λ‘œμš°ν•˜λŠ” API, @thockin? μž‘μ—…μ— ꡐ체가 μžˆμŠ΅λ‹ˆκΉŒ?

이것은 Ingressμ—μ„œ 거의 λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μ•„λ‹ˆμš”? λ§Žμ€ 쀑볡을 ν”Όν•˜κΈ° μœ„ν•΄ 자주 μš”μ²­λ˜λŠ” κΈ°λŠ₯인 것 κ°™μŠ΅λ‹ˆλ‹€. -- 우리의 λŒ€μ•ˆμ€ λ¬΄μ—‡μž…λ‹ˆκΉŒ?

λˆ„κ΅°κ°€μ—κ²Œ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. nginx μˆ˜μ‹ μ—μ„œ server-alias μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 단일 μˆ˜μ‹ μ— λŒ€ν•΄ μ—¬λŸ¬ 도메인을 κ°–μŠ΅λ‹ˆλ‹€.

λˆ„κ΅°κ°€μ—κ²Œ μœ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. nginx μˆ˜μ‹ μ—μ„œ server-alias μ˜΅μ…˜μ„ μ‚¬μš©ν•˜μ—¬ 단일 μˆ˜μ‹ μ— λŒ€ν•΄ μ—¬λŸ¬ 도메인을 κ°–μŠ΅λ‹ˆλ‹€.

@catalinpan λ‹Ήμ‹ μ˜ λμ—μ„œ μ–΄λ–»κ²Œ μž‘λ™ν•©λ‹ˆκΉŒ? λ‚΄ μ„œλ²„ 별칭이 이 κ΅¬μ„±μ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: foobar-ingress
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/server-alias: "two-app.foobar.dev"
spec:
  tls:
  - secretName: tls-secret
  rules:
  - host: "one-app.foobar.dev"
    http:
      paths:
      - backend:
          serviceName: foobar
          servicePort: 80

@angelogwapo λŠ” λ³΄μœ ν•˜κ³  μžˆλŠ” nginx μˆ˜μ‹  버전이 별칭 κ΅¬ν˜„μ„ μ§€μ›ν•˜λŠ”μ§€ 확인할 κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. 버전이 μ΅œμ‹  버전인 경우 rewrite-target ꡬ문이 μ–΄λ–»κ²Œ μƒκ²ΌλŠ”μ§€ μ—¬κΈ°μ—μ„œ 확인
λ™μΌν•œ 도메인을 μ‚¬μš©ν•˜λŠ” λ‹€λ₯Έ μΈκ·Έλ ˆμŠ€κ°€ μžˆλŠ” 경우 별칭이 μž‘λ™ν•˜μ§€ μ•ŠλŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ° 에 μ„€λͺ…이 μžˆμŠ΅λ‹ˆλ‹€.

μ–Έμ œ κΉŒμ§€λ‚˜ μœ„μ˜ κ²½μš°κ°€ λ‹Ήμ‹ κ³Ό DNS λ ˆμ½”λ“œμ— μ μš©λ˜μ§€ μ•ŠλŠ” two-app.foobar.dev 와 같은 λΆ€ν•˜ 뢄산에 포인트 one-app.foobar.dev κ·€ν•˜μ˜ μ˜ˆμ œκ°€ μž‘λ™ν•©λ‹ˆλ‹€.

νŠΉμ • μ‚¬μš© 사둀, μ—¬λŸ¬ μ§€μ—­μ˜ μ—¬λŸ¬ 배포 = μƒνƒœ 확인 및 λͺ‡ 가지 μΆ”κ°€ μ˜΅μ…˜μ΄ μžˆλŠ” μ—¬λŸ¬ 호슀트λ₯Ό κ°€λ¦¬ν‚€λŠ” μ—¬λŸ¬ μ„œλ²„ 별칭 CNAME λ•Œλ¬Έμ— terraform을 μ‚¬μš©ν•˜μ—¬ Route 53μ—μ„œ μ„œλ²„ 별칭을 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ:
CNAME two-app.foobar.dev --> one-app-ew1.foobar.dev
CNAME two-app.foobar.dev --> one-app-ase1.foobar.dev

μ•„λž˜λŠ” μ œκ°€ μ‚¬μš©ν•˜λŠ” μ˜ˆμ‹œμž…λ‹ˆλ‹€.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/server-alias: public_url
  name: app1
spec:
  tls:
  - hosts:
    - public_region_url
      secretName: my_wildcard
  rules:
    - host: public_region_url
      http:
        paths:
          - path: /
            backend:
              serviceName: app1
              servicePort: 80

이 κΈ°λŠ₯은 μžλ™ν™”λœ Let's Encrypt κΈ°λŠ₯도 μ‚¬μš©ν•˜λŠ” traefik μ‚¬μš©μžμ—κ²Œ 맀우 μ’‹μŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ„œ traefik은 μ‰Όν‘œλ‘œ κ΅¬λΆ„λœ 도메인 λͺ©λ‘μ„ 호슀트둜 μ˜ˆμƒν•©λ‹ˆλ‹€(https://docs.traefik.io/v1.7/configuration/acme/#onhostrule). μ—¬κΈ°μ„œ 첫 번째 도메인은 μΈμ¦μ„œμ˜ κΈ°λ³Έ 도메인이 되고 λ‹€λ₯Έ λͺ¨λ“  것은 SAN sκ°€ λ©λ‹ˆλ‹€.

@catalinpan λ‚˜λ„ μ„œλ²„ 별칭 μ£Όμ„μœΌλ‘œ 어렀움을 κ²ͺκ³  μžˆμŠ΅λ‹ˆλ‹€.
@angelogwapo와 거의 λ™μΌν•œ ꡬ성을 가지고 μžˆμŠ΅λ‹ˆλ‹€. 두 개의 도메인이 μžˆμŠ΅λ‹ˆλ‹€.

  • one-app.one-domain.dev
  • two-app.two-domain.dev

λ‘˜ λ‹€ λ™μΌν•œ λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό 가리킀고 μžˆμŠ΅λ‹ˆλ‹€. λ‘˜ λ‹€ μœ νš¨ν•œ TLS μΈμ¦μ„œκ°€ μžˆμŠ΅λ‹ˆλ‹€.
λ‚΄ ꡬ성 μ•„λž˜. μ˜¬λ°”λ₯Έ νŽ˜μ΄μ§€λ‘œ μ—°κ²°λ˜μ§€λ§Œ TLS μΈμ¦μ„œλŠ” 호슀트둜 μ–ΈκΈ‰λœ λ„λ©”μΈμ—λ§Œ μœ νš¨ν•©λ‹ˆλ‹€. λ‹€λ₯Έ λ„λ©”μΈμœΌλ‘œ μ΄λ™ν•˜λ©΄ Kubernetes μˆ˜μ‹  컨트둀러 κ°€μ§œ μΈμ¦μ„œκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. κ·Έ λ°˜λŒ€. 도움을 μ£Όμ‹œλ©΄ κ°μ‚¬ν•˜κ² μŠ΅λ‹ˆλ‹€...

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    app.kubernetes.io/instance: ngress-rules
    cert-manager.io/issuer: letsencrypt-prod
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/server-alias: two-app.two-domain.dev
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
  name: ingress-rules
  namespace: default
spec:
  rules:
  - host: one-app.one-domain.dev
    http:
      paths:
      - backend:
          serviceName: service1
          servicePort: 80
        path: /
      - backend:
          serviceName: service2
          servicePort: 80
        path: /portal/
  tls:
  - hosts:
    - one-app.one-domain.dev
    secretName: one-app-tls
  - hosts:
    - two-app.two-domain.dev
    secretName: two-app-tls

Btw, 이 λ³€κ²½ 사항을 포함해야 ν•˜λŠ” 버전 0.27을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. https://github.com/kubernetes/ingress-nginx/pull/4472/files#diff -9bba411a7c28f1ef63c3a5339db109d5

@jacqinthebox : Ingress ꡬ성은 μ‹€μ œλ‘œ ν•˜λ‚˜μ˜ 호슀트( one-app.one-domain.dev )만 κ΅¬μ„±ν•©λ‹ˆλ‹€. λ¬Όλ‘  tls λ‘˜ λ‹€ κ΅¬μ„±ν•˜μ§€λ§Œ 각 도메인에 λŒ€ν•΄ μ—¬μ „νžˆ ν•˜λ‚˜μ˜ κ·œμΉ™μ΄ ν•„μš”ν•©λ‹ˆλ‹€. 특히 spec.rules μ•„λž˜μ˜ 배열을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. ν˜„μž¬ 두 번째 도메인이 ν”„λ‘μ‹œν•΄μ•Ό ν•˜λŠ” μ„œλΉ„μŠ€λ₯Ό NGINX에 μ•Œλ €μ£ΌλŠ” 것은 μ—†μŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ : λ‚΄ λ‚˜μœ, λ‚΄κ°€ λ„ˆλ¬΄ λΉ¨λžλ‹€. λ‚˜λŠ” 당신이 μ„œλ²„ 별칭 주석에 λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κ³  μžˆλ‹€λŠ” 것을 λͺ°λžμŠ΅λ‹ˆλ‹€.

@jacqinthebox

λ‘˜ λ‹€ λ™μΌν•œ λ‘œλ“œ λ°ΈλŸ°μ„œλ₯Ό 가리킀고 μžˆμŠ΅λ‹ˆλ‹€. λ‘˜ λ‹€ μœ νš¨ν•œ TLS μΈμ¦μ„œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

ν•˜λ‚˜μ˜ TLS λΉ„λ°€μ—μ„œ μ—¬λŸ¬ 독립 도메인을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
``` tls:

  • 호슀트:

    • one-app.one-domain.dev

    • two-app.two-domain.dev

      secretName: all-app-tls

      ```

항상 helm 차트λ₯Ό μ‚¬μš©ν•˜μ—¬ μ–΄λ ˆμ΄μ˜ 각 도메인에 λŒ€ν•œ dup ꡬ성을 생성할 수 μžˆμŠ΅λ‹ˆλ‹€. "λ§Œμ•½"당신은 λ¬Όλ‘  쑰타 μž₯치λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€ :)

+1

@kramarz , κ°μ‚¬ν•©λ‹ˆλ‹€. 이 ν•΄κ²° 방법이 μ €μ—κ²Œ νš¨κ³Όμ μž…λ‹ˆλ‹€.

ν•΄κ²° 방법은 https://github.com/jetstack/cert-manager μ—μ„œλ„ μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.
μ—¬κΈ° λ‚΄ μ˜ˆκ°€ μžˆμŠ΅λ‹ˆλ‹€

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
   name: site
   annotations:
      cert-manager.io/issuer: letsencrypt-prod
      nginx.ingress.kubernetes.io/server-alias: host2.com
spec:
   rules:
   - host: host1.com
     http:
      paths:
      - path: /
        backend:
           serviceName: site
           servicePort: 8080
   tls:
   - secretName: nice-name
     hosts:
     - host1.com
     - host2.com

@AndreKoepke κ°μ‚¬ν•©λ‹ˆλ‹€. 그것은 λ‚˜λ₯Ό μœ„ν•΄ λ‹€μ†Œ νš¨κ³Όκ°€ μžˆμ—ˆμ§€λ§Œ domain.com λ₯Ό spec.rules[0].host ν•˜κ³  www.domain.com,domain.se,www.domain.se λ₯Ό nginx.ingress.kubernetes.io/server-alias ν›„ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. controller.go:1155] Conflicting hostname (domain.com) and alias (www.domain.se). Removing alias to avoid conflicts.

μ–΄λ–€ μ œμ•ˆ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰