인프런 커뮤니티 질문&답변

wjddudgh01님의 프로필 이미지
wjddudgh01

작성한 질문수

쉽게 시작하는 쿠버네티스(v1.30) - {{ x86-64, arm64 }}

8.005 polaris 질문있습니다.

해결된 질문

작성

·

206

2

현재 강사님이 알려주신대로 polaris -dashboard다운로드하고 Loadbalancer로 진행하려고하는데요(metalib-system도 이미 설치된상태) expose를 LoadBalancer로 진행했는데 external IP 가 안나와서 yaml파일을 만들어서 진행했습니다.

이렇게하면 external IP는 나오는데 192.168.1.11:8080으로 해도 접속이안되네요.. 제가만든 yaml파일이 잘못되었을까요??

[root@m-k8s ~]# cat go.yaml 
apiVersion: v1
kind: Service
metadata:
  labels:
    app: polaris-dashboard
  name: polaris 
  namespace: polaris
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 8080
    targetPort: 80
  externalIPs:
  - 192.168.1.11
  selector:
    app: polaris-dashboard

[root@m-k8s ~]# k get -n polaris svc 
NAME                TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE
polaris             LoadBalancer   10.103.134.128   192.168.1.11   8080:30620/TCP   3m
polaris-dashboard   ClusterIP      10.106.219.11    <none>         80/TCP           4m58s

답변 3

1

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

에디터 이슈로 인덴트 설정이 안들어가서 위와 같이 다시 소스 넣어드려요! 

wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

와.. 친절한답변에.. 빠른답변.. 감사드립니다:)

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

별말씀을요~^^ 그거 덕분에 다른 분들도 도움 받으셨을꺼에요!

wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

한가지만 더여쭙겠습니다ㅠ  답변주신 

[root@m-k8s ~]# k expose deployment -n polaris polaris-dashboard --type=LoadBalancer --port=8080 --name=polaris-lb
 를 실행해도 external IP 가 계속해서 Pending 상태로 나와서요ㅠ

그거를 해결하고자 go.yaml을 만든거였는데 수정해주신 코드로도 안되네요 

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

음...혹시 IP를 모두 할당하신 상태 아니실까요?

현재 설정으로는 192.168.1.11 - 13까지 3개만 가능하거든요. 

맞다면 13번 IP를 쓰는 서비스를 지우시면 바로 할당될꺼에요!

이래도 안되면 

k describe svc <현재 서비스 이름>

을 주시면 봐드릴께요!

wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

넵 여기있습니다. 할당된 아이피는 default namespace에서 192.168.1.10 만 보여집니다.

[root@m-k8s 4.1]# k get -n polaris svc
NAME                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
polaris-dashboard   ClusterIP      10.106.32.158   <none>        80/TCP           81s
polaris-lb          LoadBalancer   10.105.222.60   <pending>     8080:30375/TCP   14s
[root@m-k8s 4.1]# 
[root@m-k8s 4.1]# 
[root@m-k8s 4.1]# k describe -n polaris svc
Name:              polaris-dashboard
Namespace:         polaris
Labels:            app=polaris
Annotations:       <none>
Selector:          app=polaris,component=dashboard
Type:              ClusterIP
IP Families:       <none>
IP:                10.106.32.158
IPs:               10.106.32.158
Port:              http-dashboard  80/TCP
TargetPort:        8080/TCP
Endpoints:         172.16.132.11:8080
Session Affinity:  None
Events:            <none>


Name:                     polaris-lb
Namespace:                polaris
Labels:                   app=polaris
                          component=dashboard
Annotations:              <none>
Selector:                 app=polaris,component=dashboard
Type:                     LoadBalancer
IP Families:              <none>
IP:                       10.105.222.60
IPs:                      10.105.222.60
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  30375/TCP
Endpoints:                172.16.132.11:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>
조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

k get cm -A

k get svc -A

을 혹시 주실수 있을까요? 

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

컨피그맵이 적용되어 있나해서요

아.그리고 혹시 모르니

k get cm -n metallb-system -o yaml도 부탁드려요

wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

[root@m-k8s 4.1]# k get cm -A

NAMESPACE         NAME                                 DATA   AGE

default           kube-root-ca.crt                     1      2d10h

kube-node-lease   kube-root-ca.crt                     1      2d10h

kube-public       cluster-info                         2      2d10h

kube-public       kube-root-ca.crt                     1      2d10h

kube-system       calico-config                        4      2d10h

kube-system       coredns                              1      2d10h

kube-system       extension-apiserver-authentication   6      2d10h

kube-system       kube-proxy                           2      2d10h

kube-system       kube-root-ca.crt                     1      2d10h

kube-system       kubeadm-config                       2      2d10h

kube-system       kubelet-config-1.20                  1      2d10h

metallb-system    kube-root-ca.crt                     1      23h

polaris           kube-root-ca.crt                     1      34m

[root@m-k8s 4.1]# k get svc -A

NAMESPACE     NAME                TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE

default       kubernetes          ClusterIP      10.96.0.1       <none>        443/TCP                  2d10h

kube-system   kube-dns            ClusterIP      10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   2d10h

polaris       polaris-dashboard   ClusterIP      10.106.32.158   <none>        80/TCP                   34m

polaris       polaris-lb          LoadBalancer   10.105.222.60   <pending>     8080:30375/TCP           33m
wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

[root@m-k8s 4.1]# k get cm -n metallb-system -o yaml
apiVersion: v1
items:
- apiVersion: v1
  data:
    ca.crt: |
      -----BEGIN CERTIFICATE-----
      MIIC5zCCAc+gAwIBAgIBADANBgkqhkiG9w0BAQsFADAVMRMwEQYDVQQDEwprdWJl
      cm5ldGVzMB4XDTIxMDUzMDA0MDc0OVoXDTMxMDUyODA0MDc0OVowFTETMBEGA1UE
      AxMKa3ViZXJuZXRlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM0w
      oTouU2TMoaRawfZh0B4sIHM8y4Ns3al4ssv45F+wdxHTMSCTbenBFH6VSacU4n9A
      rxKrb4hhjvAsR4UPDZXRkIF7HV7hoI1OSEgnPwKLC1z9vjKfU8rGtE8EnuQOmQqR
      22CDuK6jDYqt5o0JqR80uHi0BmGmaS5rSP8jZWFoG5RNVpCE2LJfxkHv2tkofMxs
      PAVMGB81+9wu/MTjsRdZc6zkYRdE8peS8S3QLNzexF9EPuBJk20ZWD3qoCSeorOw
      YmGAPKgaT7J/1cEXxRuvD5U0zsv6MOZl3dR65Z9dLnman67R5Aep9bIvTwis0MJH
      Qj9rlWK+Wu24hNBJDq8CAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgKkMA8GA1UdEwEB
      /wQFMAMBAf8wHQYDVR0OBBYEFIwcpcxZcqxnwDY0na3cUpIjPHSxMA0GCSqGSIb3
      DQEBCwUAA4IBAQAFajrT1y38DZkFzGtTD1/orbwqXA8vpOOzBPmR2F3mazCzkuUJ
      5Lu1THDkccDncEjwxPZg/RgdRqCuAgxA+j9h5A/ReX8AUtXxnTVPoc23gkMYyItq
      /0cxwwA6ijdW99RZCqCGihRqMtAMDu63svUjzo9oXZMsKnQ66z5IwvhtJqjlXqpS
      rIfamfFy6ctKA5DbJFOhWDSSANPpCYa7EG9zcC49L3EhnMy0GJnkgrjzCma6ecFF
      3p5Knkzra6elZtsyK9LNEoZdROlbwTm6NQZwGa0KWGEGvJ+KCgrbvKQQ1lSszoTD
      8hnGh8/xCf72KnrAf0jLquIit9YMIASKFERq
      -----END CERTIFICATE-----
  kind: ConfigMap
  metadata:
    creationTimestamp: "2021-05-31T15:27:07Z"
    managedFields:
    - apiVersion: v1
      fieldsType: FieldsV1
      fieldsV1:
        f:data:
          .: {}
          f:ca.crt: {}
      manager: kube-controller-manager
      operation: Update
      time: "2021-05-31T15:27:07Z"
    name: kube-root-ca.crt
    namespace: metallb-system
    resourceVersion: "21377"
    uid: 50a6b2f4-0880-4160-b979-c7952af6c6b7
kind: List
metadata:
  resourceVersion: ""
  selfLink: ""
wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

올렸습니다. 혹시 버전이 문제가 될 수도 있을까요??

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

음...metallb configmap이 좀 이상한데요...

제꺼로 설치했으면 이렇게 나올수가 없는데....설치를 어떻게 하신지 문의드려도 될까요?

https://github.com/sysnet4admin/_Lecture_k8s_starter.kit/blob/main/ch2/2.4/metallb.yaml

이렇게 나와야 하거든요. 지금 config라는 cm이 없는데요. 

[root@m-k8s ~]# k get cm config -n metallb-system -o yaml

apiVersion: v1

data:

  config: |

    address-pools:

    - name: nginx-ip-range

      protocol: layer2

      addresses:

      - 192.168.1.11-192.168.1.13

kind: ConfigMap

metadata:

  annotations:

    kubectl.kubernetes.io/last-applied-configuration: |

      {"apiVersion":"v1","data":{"config":"address-pools:\n- name: nginx-ip-range\n  protocol: layer2\n  addresses:\n  - 192.168.1.11-192.168.1.13\n"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"config","namespace":"metallb-system"}}

  creationTimestamp: "2021-05-23T11:54:11Z"

  name: config

  namespace: metallb-system

  resourceVersion: "449"

  uid: 25f1edd0-c9ca-4c5e-a061-666dafdda51b

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

IP는 좀 영역이 다를수 있는데, 지금 다른 테스트하는 클러스터라서...어쨌든 configmap이 있어야 하는데....

일단 해결은 

k delete ns metallb-system

k apply -f ~/_Lecture_k8s_starter.kit/blob/main/ch2/2.4/metallb.yaml

하면 해결되실꺼에요

원인은 아마도 MetalLB 따로 메뉴얼보고 설치하신거 같긴한데, 말씀을 들어봐야 할꺼 같아요. 

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

해보시고 말씀해주세요~!

wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

감사합니다... 해결되었습니다ㅠㅠ 강사님이 말씀하신대로 metallb 때문이었어요 ㅠ

제가 찾아서 깔았는데 잘못깔앗나봅니다..

https://metallb.universe.tf/installation/ 설치는 여기서했습니다.

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

나중에 컨피그맵 설명할때 할꺼긴 한데 인스톨 후에 컨피그를 넣어서 l2 또는 l3로 쓸지 정해줘야 되요. 설치만 하면 되는게 아니라서요.

해결되서 다행이네요~^^

wjddudgh01님의 프로필 이미지
wjddudgh01
질문자

아하!! ch2에 넣어주신 metellb.yaml 파일 설치시에 진행되는내용 말씀하시는거군요!

좋은 답변과 강의 감사합니다ㅎㅎ

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

넵 감사합니다 ^^ 

1

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

안녕하세요 

저희가 실습을 다음과 같이 latest로 하다보니, polaris에서 변경하는 점을 따라갈수가 없네요 ㅠ 

https://github.com/fairwindsops/polaris/releases/latest/download/dashboard.yaml

일단 다음과 같이 하시면 

[root@m-k8s ~]# k expose deployment -n polaris polaris-dashboard --type=LoadBalancer --port=8080 --name=polaris-lb

service/polaris-lb exposed

[root@m-k8s ~]# k get svc -n polaris 

NAME                TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE

polaris-dashboard   ClusterIP      10.102.52.63     <none>         80/TCP           3m27s

polaris-lb          LoadBalancer   10.101.133.138   192.168.1.13   8080:30706/TCP   9s

192.168.1.13:8080으로 접속이 가능하실꺼고요. 

제공해 주신 소스 코드로는 접속을 할 수가 없는데요. 

다음 (열심 준비 중) 과정에서 설명 드리겠지만...

파드에서 사용하는 컨테이너는 이미 지정되어 있는 포트가 있습니다. 

그래서 일반적으로 port와 targetPort는 동일하게 맞춰서 사용하는데요 

(들어오는 문과 나가는 문이 갔다고 할까요? 다르게 하는 예제는 아래에 포함)

이건 일단 이 내용을 참고하시면 좋을꺼 같아요 

https://stackoverflow.com/questions/36151986/docker-change-a-port-publishing-of-a-running-container

apiVersion: v1
kind: Service
metadata:
labels:
app: polaris
component: dashboard
name: polaris-lb
namespace: polaris
spec:
ports:
- port: 80 # 여긴 보통 맞추는데 80을 선호하시는거 같아서 80으로 넣었어요
targetPort: 8080 # 여기는 바꾸실수 없어요 바꾸려면 다시 컨테이너를 포장해야 되요
selector: # 여기 셀렉터가 안 맞아서 그런건데 매우 자세히는 지금 바로 설명은 어려울꺼 같아요 ㅠㅠ
app: polaris
component: dashboard
type: LoadBalancer

[root@m-k8s ~]# kubectl apply -f  go.yaml 

service/polaris-lb created

[root@m-k8s ~]# k get svc -n polaris 

NAME                TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)        AGE

polaris-dashboard   ClusterIP      10.101.127.58   <none>         80/TCP         26s

polaris-lb          LoadBalancer   10.102.235.99   192.168.1.13   80:30554/TCP   8s

이렇게 하시면 192.168.1.13 으로 접속 가능하시답니다. (80은 디폴트라서 제외)

문제 해결에 도움이 되시면 좋겠네요. 

업데이트도 해야겠네요. 감사합니다. 

조훈 드림!

0

조훈(Hoon Jo)님의 프로필 이미지
조훈(Hoon Jo)
지식공유자

apiVersion: v1
kind: Service
metadata:
  labels:
    app: polaris
    component: dashboard
  name: polaris-lb
  namespace: polaris
spec:
  ports:
  - port: 80          # 여긴 보통 맞추는데 80을 선호하시는거 같아서 80으로 넣었어요 
    targetPort: 8080  # 여기는 바꾸실수 없어요 바꾸려면 다시 컨테이너를 포장해야 되요 
  selector:           # 여기 셀렉터가 안 맞아서 그런건데 매우 자세히는 지금 바로 설명은 어려울꺼 같아요 ㅠㅠ
    app: polaris
    component: dashboard
  type: LoadBalancer
wjddudgh01님의 프로필 이미지
wjddudgh01

작성한 질문수

질문하기