모든 노드의 서비스를 포트 80 및 443에 바인딩하여 DNS 이름(kubernetes)을 통해 HTTP/S를 통해 직접 서비스로 리디렉션한 다음 배포(nginx)로 리디렉션하는 모든 노드로 리디렉션하려고 합니다. 그러나 NodePort의 범위는 30000에서 32xxx까지이므로 이것이 어떻게 작동하는지 모르겠습니다.
이게 내 설정이야
DNS-Name IPv4
k8s-master 172.25.35.47
k8s-node-01 172.25.36.47
k8s-node-02 172.25.36.8
kubernetes 172.25.36.47
kubernetes 172.25.36.8
내 yaml 파일
apiVersion: v1
kind: Service
metadata:
name: proxy
spec:
ports:
- name: http
nodePort: 80
port: 80
protocol: TCP
targetPort: 80
- name: https
nodePort: 443
port: 443
protocol: TCP
targetPort: 443
selector:
name: proxy
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: proxy
labels:
name: proxy
spec:
selector:
matchLabels:
name: proxy
replicas: 1
template:
metadata:
labels:
name: proxy
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- name: http
containerPort: 80
protocol: TCP
- name: https
containerPort: 443
protocol: TCP
이 포트를 노출하는 기능을 제공하는 서비스 유형은 무엇입니까? 또는 정신적 설정을 어떻게 구현합니까?
볼커
답변1
두 가지 옵션이 있습니다:
- 간단한 포트 포워딩
- 외부 IP
- 계속 활동하다
간단한 포트 포워딩
모든 서버에서 다음 명령을 실행하십시오.
sudo iptables -t nat -I PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports <nodeport>
sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 443 -j REDIRECT --to-ports <nodeport>
<nodeport>
nodeport에 대해 선택한 포트로 바꾸십시오 . 이를 위해서는 모든 머신에서 명령을 실행해야 하는데 이는 다소 번거롭습니다. 더 나은 해결책은 다음과 같습니다.
외부 IP
이를 통해 특정 노드의 모든 포트를 바인딩한 다음 클러스터를 통해 라우팅할 수 있습니다. 분명히 이는 단일 실패 지점을 제공하며 다음을 통해 해결할 수 있습니다.
계속 활동하다
keepalived는 매우 간단한 소프트웨어입니다. 기본 노드에 장애가 발생하면 다른 노드를 가리키도록 이동되는 가상 IP 주소를 생성합니다. 이는 기본 연결 유지 서버에 대한 별칭 IP 주소를 효과적으로 생성합니다. 좋은 시작은연결 유지 VIP, 귀하가 제공하는 서비스에 대해 연결 유지를 자동으로 설정합니다.
결론적으로
나는 개인적으로 내 네트워크 모델에 더 잘 맞기 때문에 이 목적으로 keepalived-vip를 사용합니다. 그러나 클라이언트가 서버에 액세스할 수 있는 경우 간단한 포트 전달이 유일한 방법입니다.