#git #nginx #ssh #kubernetes #gogs
#git #nginx #ssh #kubernetes #gogs
Вопрос:
У меня есть небольшой кластер kubernetes (1.3) (в основном один узел), и я хотел бы установить туда gogs. Gogs «устанавливается» с помощью Helm. У меня есть следующие шаблоны в моей таблице управления:
- Развертывание (с использованием изображений gogs: 0.9.97, с контейнерным портом 3000 (http), а также 2222 (ssh)
- Вход (это только для порта 80)
- Сервис (порт 80 (http), а также 2222 (ssh))
HTTP-материал настроен правильно, и я могу получить доступ к контейнеру, а также к содержащимся в нем git-репозиториям через http без каких-либо проблем. Теперь я хотел бы использовать ssh и для git-соединений. Я попробовал конфигурацию —tcp-services-configmap для nginx-ingress, но безрезультатно. В журнале контроллера входа указано, что у настроенной службы нет активных конечных точек, что я нахожу довольно странным, поскольку http-материал работает.
Обновить
Я только что выполнил nmap в DNS, и порт 2222 не открыт. Это похоже на проблему конфигурации. Порт открыт в контейнере (проверено путем подключения к IP-адресу кластера из ndoe).
Полагаю, проблема в том, что в журнале контроллера входа указано, что настроенная служба не имеет активных конечных точек.
Моя конфигурация службы:
apiVersion: v1
kind: Service
metadata:
name: {{ template "fullname" . }}
labels:
app: {{ template "fullname" . }}
spec:
ports:
- name: http
port: 80
targetPort: http
protocol: TCP
- name: ssh
port: 2222
targetPort: ssh
protocol: TCP
selector:
app: {{ template "fullname" . }}
Конфигурационная карта:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-configmap-ssh
data:
2222: "default/{{ template "fullname" . }}:2222"
Комментарии:
1. вы пробовали генерировать свои ssh-ключи и загружать их в репозиторий git? и какую ошибку вы получаете, когда используете ssh для git?
2. Я пытаюсь получить доступ к git-репозиторию «обычным» способом (git clone ssh://git@gogs.xxx.yy:2222/username/test-master.git ) и я уже добавил свой ключ в gogs. Не работает.
Ответ №1:
Отвечая на мой собственный вопрос. Эта проблема скорее связана с конфигурацией и вызвана моей собственной ошибкой.
В принципе, я не опубликовал ReplicationController ресурса Nginx-Ingress. В этом не хватало порта 2222. так что теперь это выглядит так:
apiVersion: v1
kind: ReplicationController
metadata:
name: {{ template "fullname" . }}
labels:
k8s-app: "{{ .Chart.Name }}"
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
spec:
replicas: 1
selector:
k8s-app: "{{ .Chart.Name }}"
template:
metadata:
labels:
name: {{ template "fullname" . }}
k8s-app: "{{ .Chart.Name }}"
chart: "{{.Chart.Name}}-{{.Chart.Version}}"
spec:
terminationGracePeriodSeconds: 60
containers:
- image: gcr.io/google_containers/nginx-ingress-controller:0.8.3
name: "{{ .Chart.Name }}"
imagePullPolicy: Always
readinessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
livenessProbe:
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
timeoutSeconds: 1
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
ports:
- containerPort: 80
hostPort: 80
# we do need to expose 2222 to be able to access this port via
# the tcp-services
- containerPort: 2222
hostPort: 2222
args:
- /nginx-ingress-controller
- --default-backend-service=$(POD_NAMESPACE)/default-http-backend
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-configmap-ssh